对OpenGL的3D场景绘制的问题二维叠加 [英] Opengl drawing a 2d overlay on a 3d scene problem
问题描述
我有一个移动的3D场景设置,我想打一个固定的2D图形用户界面叠加,就是始终在最前面,当我尝试做2D形状我什么也没看到。当我打电话:glMatrixMode(GL_PROJECTION);我的3D场景中消失,我留下了一个空白窗口...
这里是code我使用覆盖
编辑:更新code
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.0);
glVertex3f(-5.0f,-5.0f,0.0);
glVertex3f(5.0F,-5.0f,0.0);
glVertex3f(5.0F,5.0F,0.0);
glEnd();
glPopMatrix();
过glEnable(GL_DEPTH_TEST);
glutSwapBuffers();
您必须绘制四中的其他命令。默认情况下,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);
您可能需要使用 glPushAttrib
和 glPopAttrib
为了不惹你的状态。
I have a moving 3d scene set up, and I want to make a stationary 2d GUI overlay that is always on top, when I try making 2d shapes I don't see anything. When I call: glMatrixMode(GL_PROJECTION); my 3d scene disappears and I'm left with a blank window...
here is the code I'm using for the overlay
EDIT: updated code
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();
You must draw your quad in the other order. By default, OpenGL use counterclockwise front facing polygons. That means that you don't see your polygon because you see only its back face.
You might take a look at glFrontFace.
EDIT:
Also, if that doesn't work, you could try to disable the following states:
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);
You might want use glPushAttrib
and glPopAttrib
in order not to mess your state.
这篇关于对OpenGL的3D场景绘制的问题二维叠加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!