在前景中渲染文本

Render text in foreground

本文关键字:文本      更新时间:2023-10-16

我正在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调用的参数无关。

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

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

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

有没有其他东西,比如你在代码中的其他地方启用照明,然后在呈现可能影响事情的文本之前不禁用?当我过去遇到这样的错误时,它们似乎经常与OpenGL状态中的某个东西处于我意想不到的状态有关,通常是因为我在其他地方对状态进行了一些更改,却忘记了撤消它。我建议你尝试系统地注释代码中的各种OpenGL调用,即使它们看起来没有直接关联,看看这些角色是否会出现。如果他们这样做了,那么你就会知道你需要进行/撤消哪个状态的更改。