设置glutBitmapCharacter颜色?

时间:2010-04-16 20:49:31

标签: opengl text colors glut

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

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之前设置颜色等等我已禁用着色器但我仍然有问题

3 个答案:

答案 0 :(得分:9)

在绘制字符串之前,您似乎忘记了glDisable(GL_LIGHTING)

答案 1 :(得分:3)

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

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

答案 2 :(得分: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)。