当前位置:  开发笔记 > 编程语言 > 正文

在OpenGL中,如何制作简单的背景四边形?

如何解决《在OpenGL中,如何制作简单的背景四边形?》经验,为你挑选了1个好方法。

假设我想画一个像这样的简单四边形:

glBegin(GL_QUADS);
glVertex2f(-1.0,-1.0);
glVertex2f(1.0,-1.0);
glVertex2f(1.0, 1.0);
glVertex2f(-1.0, 1.0);
glEnd();

有没有办法绘制它,使它出现在所有3D对象后面并填满整个屏幕?我的相机随着鼠标移动,因此这个四边形也必须在相机移动时显得静止不动.目的是做一个简单的背景.

我是否必须根据眼睛位置/旋转进行一些疯狂的变换,或者使用glMatrixMode()是否有更简单的方法?



1> Mongoose..:

听起来你想要做的就像你在一个简单的游戏中绘制2D HUD时那样,或者只是一个持久的背景.我不是专家,但我最近才做到这一点.你想要做的是将投影矩阵更改为正交投影,渲染四边形,然后切换回之前的投影.您可以使用矩阵堆栈完成此操作,它完全独立于任何相机.

所以,首先:

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
int w = glutGet(GLUT_WINDOW_WIDTH);
int h = glutGet(GLUT_WINDOW_HEIGHT);
gluOrtho2D(0, w, h, 0);

这将一个新的投影矩阵推到投影堆栈上(我在这个项目中使用过剩,但它应该转换为普通的OpenGL).然后,我得到窗口的宽度和高度,并使用gluOrtho2D来设置我的正投影.

下一个:

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
// Draw your quad here in screen coordinates

在这里,我只是将一个新的,干净的矩阵推到模型视图上.您可能不需要这样做.

最后:

glPopMatrix() // Pops the matrix that we used to draw the quad
glMatrixMode(GL_PROJECTION);
glPopMatrix(); // Pops our orthographic projection matrix, which restores the old one
glMatrixMode(GL_MODELVIEW); // Puts us back into GL_MODELVIEW since this is probably what you want

我希望这有帮助.如您所知,它不需要使用眼睛位置.这主要是因为当我们使用完全适合我们窗户的新正投影时,这是无关紧要的.如果在其他绘制调用之后执行此操作,则可能不会将四边形置于后面.

编辑:关闭深度测试和清除深度缓冲也可能有所帮助,正如Boojum所说.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有