gpt4 book ai didi

c++ - 是否可以在不退出 OpenGL 矩阵的情况下使用 glColor3f 更改颜色?

转载 作者:行者123 更新时间:2023-11-30 03:31:37 25 4
gpt4 key购买 nike

我想在 HUD 中写点东西,我想交替使用两种颜色的文字。我不能用很多矩阵来做(我的意思是写很多单独的 glPushMatrix 和 glPopMatrix),因为我想保存我用 glRasterPos2f 启动的文本位置。我的意思是,如果不计算已显示文本中每个字母的宽度,我就无法正确移动文本的位置,因为我认为它有点粘。所以我想留在一个 Matrix 中,并在找到空间时简单地更改颜色。

编辑
好的,例如,如果我想用红色写第一个词,然后用绿色写其他词:

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();

最佳答案

glutBitmapCharacter 通过调用 glBitmap 绘制字符,后者又使用 GL_CURRENT_RASTER_COLOR。后者通过在调用时调用 glRasterPosglWindowPos 设置为 GL_CURRENT_COLORglColor 仅更新 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 ...

但是,我强烈建议放弃您所做的一切并切换到现代 OpenGL。

关于c++ - 是否可以在不退出 OpenGL 矩阵的情况下使用 glColor3f 更改颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com