如何在 QOpenGLTexture 上渲染文本?
Posted
技术标签:
【中文标题】如何在 QOpenGLTexture 上渲染文本?【英文标题】:How to render text over the QOpenGLTexture? 【发布时间】:2020-01-15 14:00:51 【问题描述】:所以我的任务是在 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();
...它开始向我显示没有任何文字的纹理。 我需要在使用后以某种方式取消绑定纹理吗?
【问题讨论】:
我尝试使用release
方法,但没有帮助
【参考方案1】:
必须启用二维纹理,请参阅glEnable
:
glEnable(GL_TEXTURE_2D);
如果启用纹理,则默认情况下纹理元素的颜色乘以当前颜色,因为默认情况下纹理环境模式 (GL_TEXTURE_ENV_MODE
) 为GL_MODULATE
。见glTexEnv
。
这会导致纹理纹理像素的颜色与您设置的最后一个颜色“混合”glColor
。
在渲染纹理之前设置“白色”颜色,以解决您的问题:
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);
【讨论】:
所以我按照你说的做了,但仍然只有一个纹理 已修复!好像有2个问题。你帮助我的第一个。第二个,文本坐标在纹理中。我只是将它们移近一点,然后再靠近纹理。感谢您的帮助!以上是关于如何在 QOpenGLTexture 上渲染文本?的主要内容,如果未能解决你的问题,请参考以下文章
glTexSubImage3D vs QOpenGLTexture setData
有没有办法确定 OpenGL 纹理或 QOpenGLTexture 的图形内存占用?