我一直在尝试向我的 OpenGL/C++ 项目中添加一些基本的类似 HUD 的文本。
因此我决定
glutBitmapCharacter( type, character)
成为我的首选武器。
我意识到,为了最简单的使用,我应该将 2D 矩阵附加到我之前的渲染区域。
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 10, 0, 10);
这应该给我一个可爱的 10*10 2D 立方体来玩。
现在,当 glutBitmapCharacter 记住他的最后一个字符位置以附加下一个字符时,就会出现问题。它在写字符串时非常聪明,它显然会记住这个位置,并让我的文本在屏幕上飞过一次 :) 淘气。
glRasterPos2f(x,y);
应该 - 正如我所听到的 - 重置这个东西是正常的 - (虽然我不完全理解为什么 gl 函数控制 glu 函数,但这只是一个旁注)。
现在发生的奇怪事情是,一旦我运行代码:
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 10, 0, 10);
string message ="mmh... Pie...";
float poss[3];
glRasterPos3f(0.0, 0.0, 0.0);
glGetFloatv(GL_CURRENT_RASTER_POSITION, poss);
std::cout<< "X" <<(GLfloat) poss[0] << " Y"<<poss[1] << " Z"<<poss[2] << std::endl;
for( size_t i = 0; i < message.size(); ++i ) {
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, message[i]);
}
glPopMatrix();
我的文字没有显示。事实上,由此产生的 X、Y 和 Z(甚至不确定 Z 是否必要......无论如何都应该为 0)都是 inf(无限)。如果我不设置自己的 glRasterPos,除了离开屏幕之外,一切都会正常进行。我的返回位置是向上计数的 X 和 0 , 0 - 正如预期的那样。
那么这是怎么回事,我到底做错了什么?