我有一个移动的3D场景设置,我想制作一个永远在顶部的固定2d GUI覆盖,当我尝试制作2d形状时,我什么也看不到.当我调用:glMatrixMode(GL_PROJECTION); 我的3D场景消失了,我留下了一个空白的窗口......
这是我用于叠加的代码
编辑:更新的代码
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-100, 100, -100, 100);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glColor3f(1, 1, 1);
glPushMatrix();
glBegin(GL_QUADS);
glVertex3f(-5.0f, 5.0f, 0.0f);
glVertex3f(-5.0f, -5.0f, 0.0f);
glVertex3f(5.0f, -5.0f, 0.0f);
glVertex3f(5.0f, 5.0f, 0.0f);
glEnd();
glPopMatrix();
glEnable(GL_DEPTH_TEST);
glutSwapBuffers();
Run Code Online (Sandbox Code Playgroud)
嗯...基于您发布的代码片段,我相信您的场景由于您对矩阵的处理而消失了 -对我来说有点混乱。该方法应如下所示:
另外,如果您想让生活更轻松,请考虑切换到着色器(以及一般而言,切换到现代OpenGL版本):)。
您必须以其他顺序绘制四边形。默认情况下,OpenGL 使用逆时针正面多边形。这意味着您看不到多边形,因为您只能看到它的背面。
您可以看一下glFrontFace。
编辑:
另外,如果这不起作用,您可以尝试禁用以下状态:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-100, 100, -100, 100);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_BLENDING);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
Run Code Online (Sandbox Code Playgroud)
您可能需要使用glPushAttrib,glPopAttrib以免扰乱您的状态。