我一直在尝试为我的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 - 正如预期的那样。
那么关于这个的交易是什么,我究竟做错了什么?
答案 0 :(得分:0)
您产生了一个宏分段错误:glGetFloatv(GL_CURRENT_RASTER_POSITION,poss)返回4个值,因此您必须使用:
float poss[4];
除此之外,您的代码在我的机器上正常运行并返回:
X0 Y0 Z0.5
所以这个错误似乎不在你发布的代码中。您应该尝试将其复制到基本的“HelloWorld”-GL程序中,看看它是否在那里工作。小心一些OpenGL命令仅在初始化有效绘图表面后才起作用 - 我猜你这样做了吗?