我想在HUD中写一些东西,我想交替使用两种颜色的单词。我不能用很多Matrixes(我的意思是写在许多单独的glPushMatrix和glPopMatrix中),因为我想保存我用glRasterPos2f启动的文本位置。我的意思是我不能正确地移动文本的位置而不计算每个字母显示已经文本的宽度是因为我觉得有点粘。所以我想留在一个矩阵中,只需在找到空格时更改颜色。
EDIT
好吧,例如,如果我希望用红色写出第一个单词,用绿色写出其他单词:
glPushMatrix();
glColor3f(1, 0, 0);
glRasterPos2f(10, 10);
void * font = GLUT_BITMAP_HELVETICA_18;
string label = "first second";
int i = 0;
for (; i < label.length(); i++)
{
char c = label[i];
if (c == ' ')
{
i++;
break;
}
glutBitmapCharacter(font, c);
}
glColor3f(0, 1, 0);
for (; i < label.length(); i++)
{
char c = label[i];
glutBitmapCharacter(font, c);
}
glPopMatrix();
答案 0 :(得分:2)
glutBitmapCharacter
通过致电glBitmap
来吸引角色,而GL_CURRENT_RASTER_COLOR
则使用glRasterPos
。后者是通过在通话时拨打glWindowPos
和GL_CURRENT_COLOR
到glColor
来设置的。 GL_CURRENT_COLOR
仅更新glColor3f(1,0,0);
glRasterPos(...); // GL_CURRENT_RASTER_COLOR = 1,0,0
glBitmap(...); // draws in red
glColor3f(0,1,0);
glBitmap(...); // still draws in red
glRasterPos(...); // GL_CURRENT_RASTER_COLOR = 0,1,0
glBitmap(...); // now draws in green
:
glRasterPos/glWindowPos
因此,唯一的解决方案是在单词之间调用GL_CURRENT_RASTER_POSITION
以获取更新的颜色。为此,您可以按如下方式检索// ... draw first word ...
float pos[4] = {};
glGetFloatv(GL_CURRENT_RASTER_POSITION, pos);
glColor3f(0,1,0);
glWindowPos3fv(pos);
// ... draw second word ...
:
{{1}}
HOWEVER ,我强烈建议您取消所有操作并切换到现代OpenGL。