如何通过QOpenGLTexture渲染文本?

问题描述 投票:0回答:1

所以我的任务是在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();

...它开始向我显示没有任何文本的纹理。使用后我需要以某种方式解除纹理的绑定吗?

qt opengl text textures glut
1个回答
0
投票

必须启用二维纹理化,请参见glEnable

glEnable

如果启用纹理,则默认情况下,纹理像素的颜色乘以当前颜色,因为默认情况下纹理环境模式(glEnable(GL_TEXTURE_2D); )为GL_TEXTURE_ENV_MODE。参见GL_MODULATE

[这将导致纹理的纹理像素的颜色与glTexEnv设置的最后一个颜色“混合”。

在渲染纹理之前设置“白色”颜色,以解决您的问题:

glTexEnv

绘制四边形后禁用二维纹理化:

glColor
© www.soinside.com 2019 - 2024. All rights reserved.