我正在尝试在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
调用的参数如何,文本始终以相同的尺寸呈现。
glOrtho()
的调用让我感到奇怪。通常,我认为你希望它是glOrtho(0, pixelWidth, 0, pixelHeight, -1, 1);
。因为现在你的意思是你的世界只有11 x 11个单位。这可能导致字母被绘制在屏幕边缘之外,具体取决于(2,2)
是基线、上升部分还是下降部分。 - user1118321glRasterPos
之前调用glLoadIdentity()
似乎没有任何效果... - Manlio