在前景中呈现文本

4

我正在尝试在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
@user1118321 嗯,实际上你说它很奇怪是对的 :) 目前我已将其更改为10点字符。然而,即使它可能太大了,我也应该能够看到一些东西,至少是字符的一部分。既没有OpenGL错误也没有警告... - Manlio
我不知道这是否相关,但是根据此页面的说法,您需要禁用GL_TEXTURE_2D才能使文本呈现。不知道为什么。 - user1118321
如果在-drawForeground之外工作正常,那么问题可能是矩阵变换。如果在调用字符绘制方法之前将投影矩阵重置为标识,会发生什么? - user1118321
@user1118321 我按照你的建议尝试了,但在调用glRasterPos之前调用glLoadIdentity()似乎没有任何效果... - Manlio
显示剩余3条评论
1个回答

2

如果您尚未尝试过以下方法,可以尝试一下:

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

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

您的代码中是否启用了其他类似灯光之类的东西,在渲染文本之前没有禁用,这可能会影响到结果?当我遇到类似问题时,通常与OpenGL状态的某些内容有关,因为我在其他地方做了一些更改,却忘记恢复原态。建议您尝试逐个注释掉代码中各种OpenGL调用,即使它们看起来不直接相关,看看字符是否显示出来。如果显示出来,则会知道需要进行哪种状态更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接