我们说我想得出一个简单的四像这样:

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表明

其他提示

下面是步骤,我想为每个使用框架:

  1. 清楚的深入缓冲区 glClear(GL_DEPTH_BUFFER_BIT);
  2. 关闭深度测试 glDisable(GL_DEPTH_TEST);
  3. 装载在一个固定的正投影带 gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
  4. 画出你的四因为你描述。
  5. 又深度测试。
  6. 载你你经常透预测和绘制其余的图。

你不能只把它在后台运行,如果你想在你的周围框自己英寸你需要先画它,使其所有对象的后面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top