在照片,我如何做一个简单的背景四?
-
19-08-2019 - |
题
我们说我想得出一个简单的四像这样:
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()?
解决方案
这听起来像你想要做的是类似于你在一个简单的游戏,或者只是一个背景是持久绘制2D HUD时。我不是专家,但我就是这样做的相对较晚。你想要做什么是投影矩阵更改为正投影,渲染你的四,然后再切换回你以前有什么预测。可以用矩阵堆栈做到这一点,并且它是完全独立于任何照相机的。
因此,首先:
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
int w = glutGet(GLUT_WINDOW_WIDTH);
int h = glutGet(GLUT_WINDOW_HEIGHT);
gluOrtho2D(0, w, h, 0);
此将一个新投影矩阵到投影堆栈(I用过剩这个项目,但它应该转换为只是正常的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表明
其他提示
下面是步骤,我想为每个使用框架:
- 清楚的深入缓冲区
glClear(GL_DEPTH_BUFFER_BIT);
- 关闭深度测试
glDisable(GL_DEPTH_TEST);
- 装载在一个固定的正投影带
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
- 画出你的四因为你描述。
- 又深度测试。
- 载你你经常透预测和绘制其余的图。
你不能只把它在后台运行,如果你想在你的周围框自己英寸你需要先画它,使其所有对象的后面。
不隶属于 StackOverflow