8

只是想知道是否有人可以帮助我使用以下代码找到我的问题,其中文本颜色设置不正确(它只是渲染背景中的任何颜色)

void RenderText(int x, int y, const char *string)
{
int i, len;

glUseProgram(0);

glLoadIdentity();
glColor3f(1.0f, 1.0f, 1.0f);
glTranslatef(0.0f, 0.0f, -5.0f);
glRasterPos2i(x, y);

glDisable(GL_TEXTURE_2D);
for (i = 0, len = strlen(string); i < len; i++)
{
    glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int)string[i]);
}
glEnable(GL_TEXTURE_2D);
}

我已经检查了所有常见的东西(我认为),禁用纹理,在 rasterPos'ing 之前设置颜色等我禁用了着色器,但我仍然有问题

4

3 回答 3

10

看起来你glDisable(GL_LIGHTING)在画弦之前忘记了。

于 2011-11-23T09:16:52.377 回答
3

任何 OpenGL 位图都不会存储颜色(这是glutBitmapCharacter创建的。位图是单色的,只存储形状。

当绘制位图时(例如glBitmap或可能glDrawLists),使用当前的光栅颜色。光栅颜色并不总是与活动颜色相同,请参阅http://www.opengl.org/wiki/Coloring_a_bitmap

于 2011-03-20T02:19:40.170 回答
0

颜色通常由 glColor3f 函数控制,因此如果文本是白色并且不应该是白色,那么以下更改应该会有所帮助:

glLoadIdentity();
glColor3f(0.5f, 0.5f, 0.5f);     //<-- this line controls the color (now text is gray)
glTranslatef(0.0f, 0.0f, -5.0f);
glRasterPos2i(x, y);

此外,调用 glDisable(GL_TEXTURE_2D) 和 glEnable(GL_TEXTURE_2D) 是不必要的。相反,您可以调用 glBindTexture(GL_TEXTURE_2D,0) 来禁用纹理,然后使用相同的函数来设置活动纹理。只需确保在初始化函数中调用 glEnable(GL_TEXTURE_2D) 即可。

于 2011-03-20T01:26:35.537 回答