如何在 QOpenGLTexture 上渲染文本?
How to render text over the QOpenGLTexture?
所以我的任务是在 QOpenGLWidget 的纹理上渲染一些文本。
我对文本使用简单的 glutBitmapCharacter
,它在没有纹理的情况下工作正常,但是当我在像这样的文本之前添加纹理时:
// in initializeGL
QOpenGLTexture t = new QOenGLTexture(img);
t->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
t->setMagnificationFilter(QOpenGLTexture::Linear);
// in printGL
t->bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(0, 0);
glTexCoord2f(0, 1); glVertex2i(0, 255);
glTexCoord2f(1, 1); glVertex2i(255, 255);
glTexCoord2f(1, 0); glVertex2i(255, 0);
glEnd();
...它开始向我显示没有任何文字的纹理。
我需要在使用后以某种方式解除绑定纹理还是什么?
必须启用二维纹理,请参阅glEnable
:
glEnable(GL_TEXTURE_2D);
如果启用纹理,则默认情况下纹理元素的颜色乘以当前颜色,因为默认情况下纹理环境模式 (GL_TEXTURE_ENV_MODE
) 为 GL_MODULATE
。参见 glTexEnv
。
这会导致纹理纹素的颜色是 "mixed" 你最后设置的颜色 glColor
。
在渲染纹理之前设置 "white" 颜色,以解决您的问题:
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
绘制四边形后禁用二维纹理:
glEnable(GL_TEXTURE_2D);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(0, 0);
glTexCoord2f(0, 1); glVertex2i(0, 255);
glTexCoord2f(1, 1); glVertex2i(255, 255);
glTexCoord2f(1, 0); glVertex2i(255, 0);
glEnd();
glDisable(GL_TEXTURE_2D);
所以我的任务是在 QOpenGLWidget 的纹理上渲染一些文本。
我对文本使用简单的 glutBitmapCharacter
,它在没有纹理的情况下工作正常,但是当我在像这样的文本之前添加纹理时:
// in initializeGL
QOpenGLTexture t = new QOenGLTexture(img);
t->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
t->setMagnificationFilter(QOpenGLTexture::Linear);
// in printGL
t->bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(0, 0);
glTexCoord2f(0, 1); glVertex2i(0, 255);
glTexCoord2f(1, 1); glVertex2i(255, 255);
glTexCoord2f(1, 0); glVertex2i(255, 0);
glEnd();
...它开始向我显示没有任何文字的纹理。 我需要在使用后以某种方式解除绑定纹理还是什么?
必须启用二维纹理,请参阅glEnable
:
glEnable(GL_TEXTURE_2D);
如果启用纹理,则默认情况下纹理元素的颜色乘以当前颜色,因为默认情况下纹理环境模式 (GL_TEXTURE_ENV_MODE
) 为 GL_MODULATE
。参见 glTexEnv
。
这会导致纹理纹素的颜色是 "mixed" 你最后设置的颜色 glColor
。
在渲染纹理之前设置 "white" 颜色,以解决您的问题:
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
绘制四边形后禁用二维纹理:
glEnable(GL_TEXTURE_2D);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(0, 0);
glTexCoord2f(0, 1); glVertex2i(0, 255);
glTexCoord2f(1, 1); glVertex2i(255, 255);
glTexCoord2f(1, 0); glVertex2i(255, 0);
glEnd();
glDisable(GL_TEXTURE_2D);