OpenGL glRasterPos不能正确接受我的值

时间:2013-02-12 11:25:16

标签: c++ opengl glu

我一直在尝试为我的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 - 正如预期的那样。

那么关于这个的交易是什么,我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

您产生了一个宏分段错误:glGetFloatv(GL_CURRENT_RASTER_POSITION,poss)返回4个值,因此您必须使用:

float poss[4];

除此之外,您的代码在我的机器上正常运行并返回:

X0 Y0 Z0.5

所以这个错误似乎不在你发布的代码中。您应该尝试将其复制到基本的“HelloWorld”-GL程序中,看看它是否在那里工作。小心一些OpenGL命令仅在初始化有效绘图表面后才起作用 - 我猜你这样做了吗?