【发布时间】:2011-03-29 02:26:48
【问题描述】:
我查看了此处发布的有关此事的一些问题,但仍然无法弄清楚为什么我的 2d HUD 出现但让我的 3d 渲染世界消失了。
编辑:似乎 2d 场景正在控制整个屏幕,所以我不时可以看到 3d 场景在 2d 场景中出现故障。因此,即使我只需要渲染一个 10 x 10 像素的四边形,它也会渲染它,然后将屏幕的其余部分空白。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,x,y);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0,-0.5,-6.0);
glPushMatrix();
..Draw some 3d stuff...
glPopMatrix();
// Start 2d
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(0.0f, 255.0f, 1.0f);
glBegin(GL_QUADS);
glVertex2f(0.0, 0.0);
glVertex2f(10.0, 0.0);
glVertex2f(10.0, 10.0);
glVertex2f(0.0, 10.0);
glEnd();
然后我交换缓冲区
这是我的代码的顺序。就像它产生了 3d 空间,然后产生了 2d 空间,这反过来又抵消了 3d 空间。
【问题讨论】:
-
SCREEN_WIDTH和x有什么区别(用于glViewport)?如果您注释掉最后六行,但保留 2-D 设置,3-D 渲染是否仍然消失?你能把它缩小到干扰 3-D 部分的一行或命令吗? -
@Ben Voigt:如果我注释掉最后 6 行(从 glbegin() 开始),3d 渲染仍然不会出现。 SCREEN_WIDTH 和 X 是一样的,不知不觉做了两个 var 还没整理。
-
好的,继续注释 2-D 设置代码,直到 3-D 世界回来。一次一行或使用二进制搜索来分而治之。可能您正在更改 OpenGL 状态,假设 3-D 代码保持默认状态,例如纹理或着色器或类似的东西。
-
@Ben Voigt:如果我从第二个
glMatrixMode(GL_PROJECTION);注释掉 3d 渲染显示