如何在 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);