在前景中渲染文本

时间:2012-02-26 18:56:29

标签: c++ opengl text graphics glut

我试图在MacOSX 10.7.2下的OpenGL / GLUT应用程序中渲染前景中的一些字符串。

目前我正在使用此代码在前台绘制几行,并且工作正常。

void drawForeground() {

int width = 10;
int height = 10;

glMatrixMode(GL_PROJECTION);                    
glPushMatrix(); 
glLoadIdentity();                           
glOrtho(-1, width, -1, height, -1, 1);      
glMatrixMode(GL_MODELVIEW);         

glPushMatrix(); 
glLoadIdentity();

glDepthMask(GL_FALSE);          

glBegin(GL_LINES);
//Draw the lines
glEnd();

/*********************/

glPopMatrix();      
glMatrixMode(GL_PROJECTION);                    
glPopMatrix();  
glDepthMask(GL_TRUE);   

}

现在我想画一些文字。在上一个函数中,我将这段代码添加到我放星号的行中:

glRasterPos2d(2,2);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, 'c');

但它不起作用。如果我在drawForeground方法之外使用相同的两行,则会出现'c' 我已经打电话给glDisable(GL_TEXTURE_2D)但没有任何改变。

有人可以帮助我理解我的错误吗?

解决方案:

事实证明,解决方案是使用glDisable(GL_LIGHTING)禁用照明,并在渲染文本后重新启用它。

我想强调一下,文本总是在同一维度上呈现,与glOrtho调用的参数无关。

1 个答案:

答案 0 :(得分:2)

没有什么可以肯定的,但如果你还没有尝试过几件事:

调用glutBitmapCharacter()之前设置的颜色是什么?如果绘图颜色设置为不显示背景的颜色,则可能看起来没有任何东西被绘制。

除了glDisable(GL_TEXTURE_2D)之外,您是否尝试过调用glDisable(GL_TEXTURE)?

在代码中的其他任何位置启用照明等其他内容,然后在渲染可能影响事物的文本之前不要禁用吗?当我在过去遇到这样的错误时,似乎它们经常与OpenGL状态中某些我没想到的状态相关,通常是因为我对其他地方的状态进行了一些更改而忘记撤消它。我建议您尝试系统地在代码中注释掉各种OpenGL调用,即使它们看起来没有直接关系,并查看字符是否出现过。如果他们这样做,那么您将知道需要进行哪种状态更改/撤消。