【发布时间】:2026-02-13 17:25:03
【问题描述】:
我正在尝试在 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)是基线、上升点还是下降点所在的位置。 -
@user1118321 感谢您的评论。在这种情况下,我认为我对
glOrtho的调用表现为隐式缩放。但是,即使按照您的建议进行更改(并使用glRasterPos2d(width/2.0,height/2.0);),我仍然看不到任何字母。即使放大和缩小它似乎也没有效果。 -
是的,这就是
glOrtho()所做的——隐式缩放。尝试将 18 点字符绘制到 11x11 区域似乎很奇怪。除此之外,你所拥有的看起来很合理。过程中是否有任何 OpenGL 错误? -
@user1118321 好吧,实际上你说的很奇怪是对的 :) 目前我将其更改为 10 点字符。但是,即使它可能太大,我也应该同样能够看到一些东西,至少是部分字符。既没有 OpenGL 错误也没有警告...
-
我不知道这是否相关,但是according to this page,您需要禁用 GL_TEXTURE_2D 才能获得要渲染的文本。不知道为什么。
标签: c++ opengl text graphics glut