对OpenGL的3D场景绘制的问题二维叠加 [英] Opengl drawing a 2d overlay on a 3d scene problem

查看:195
本文介绍了对OpenGL的3D场景绘制的问题二维叠加的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆