c++ - OpenGL glRasterPos 没有正确接受我的值

标签 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 - 正如预期的那样。

那么这是怎么回事,我到底做错了什么?

最佳答案

你产生了一个严重的分割错误:glGetFloatv(GL_CURRENT_RASTER_POSITION, poss) 返回 4 个值,所以你必须使用:

float poss[4];

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

X0 Y0 Z0.5

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

关于c++ - OpenGL glRasterPos 没有正确接受我的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831417/

相关文章:

c++ - std::ostream& operator<<(std::ostream&, const T&) 未被覆盖

c++ - 为什么以下代码可以正常编译,但在使用 static 时链接显示错误

c++ - 将 c++ dll 导入 vb.net 时,float*(图像类型)的等效数据类型是什么?

c++ - 如何让 OpenMP 与 #pragma omp 任务一起工作?

c++ - gluLookAt() 使黑屏

c++ - 我如何摆脱 glu.h 中的这些编译器错误?

c++ - 带索引数组的地形(高度图)LOD

c++ - glCreateShader失败并返回0

macos - glBindTexture()、glBegin() 中的 OpenGL/OpenCL 互操作性能