Opengl在3d场景问题上绘制2d覆盖图

ajo*_*joe 9 c opengl glut

我有一个移动的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)

Kos*_*Kos 5

嗯...基于您发布的代码片段,我相信您的场景由于您对矩阵的处理而消失了 -对我来说有点混乱。该方法应如下所示:

  • 清洁屏幕
  • 3D:
    • 启用照明,z测试等
    • 将活动矩阵模式设置为投影
    • 加载身份并建立透视投影
    • 将活动矩阵模式设置回modelview
    • 绘制一切3D
  • 2D:
    • 禁用照明,z测试等
    • 将活动矩阵模式设置为投影
    • 加载身份并建立正交投影
    • 将活动矩阵模式设置回modelview
    • 绘制所有二维
  • 交换缓冲区

另外,如果您想让生活更轻松,请考虑切换到着色器(以及一般而言,切换到现代OpenGL版本):)。


tib*_*bur 4

您必须以其他顺序绘制四边形。默认情况下,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)

您可能需要使用glPushAttribglPopAttrib以免扰乱您的状态。