【问题标题】:Setting glutBitmapCharacter color?设置 glutBitmapCharacter 颜色?
【发布时间】:2023-03-03 01:07:01
【问题描述】:

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

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

【问题讨论】:

  • 请张贴您观察到的照片。
  • 当你说它“渲染背景中的任何颜色”时,你是指用glClearColor设置的颜色,还是不同的颜色?

标签: opengl text colors glut


【解决方案1】:

看起来您在绘制字符串之前忘记了glDisable(GL_LIGHTING)

【讨论】:

  • 这条评论真的是救命稻草,无法弄清楚为什么我的文字一直显示为黑色。您能否解释一下为什么我们必须在写入屏幕之前关闭照明?
  • OpenGL 中的光照仅指定如何计算场景中特定点的颜色。如果你不使用光照,OpenGL 计算一个点的颜色的所有东西就是你的 GLColor 命令(也许还有一些阴影插值,但颜色来自 glColor)。如果打开 glLighting,有几种情况会影响点的颜色:光源的位置和颜色、点的材质、点的材质颜色和纹理。所以关掉它来告诉openGL用你的glColor绘制下一个东西,仅此而已。
  • 您也可以在绘制角色之前正确指定所有光照参数,这样它们就会被光源照亮。不过那会更广泛。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    颜色通常由 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)。

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 1970-01-01
      • 2013-08-27
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多