只是想知道是否有人可以帮助我使用以下代码跟踪我的问题,其中文本颜色未正确设置(它只是渲染背景中的任何颜色)
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之前设置颜色等等我已禁用着色器但我仍然有问题
答案 0 :(得分:9)
在绘制字符串之前,您似乎忘记了glDisable(GL_LIGHTING)
。
答案 1 :(得分:3)
任何OpenGL位图都没有存储颜色(这是glutBitmapCharacter
创建的。位图是单色的,只存储形状。
绘制位图(例如glBitmap
或glDrawLists
)时,使用当前的栅格颜色。栅格颜色并不总是与活动颜色相同,请参阅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)。