OpenGL - 透视问题

时间:2011-10-26 20:18:38

标签: c++ opengl glut

我只想创建一个透视图,在这个视角中,相机的眼睛会在:(2,2,2)处,看起来正对着原点。我正在尝试使用gluLookAt()glFrustum()的组合,但出于某种原因,虽然它正在渲染,但我的对象看起来非常扭曲:

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.0, 500.0);

... 

gluLookAt (-2.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);

我做错了什么?

编辑:这是截图。左侧定义了围绕y轴扫描的轮廓曲线。它应该是透视图中的圆柱体,但它是......扭曲的。

enter image description here

编辑2 :此外,透视视图中的那些轴设置如下,我知道这是不正确的:

// draw the axis
   glBegin(GL_LINES);
     // x
     glVertex3f(500.0, 0.0, 0.0);
     glVertex3f(-500.0, 0.0, 0.0);
     // y
     glVertex3f(0.0, -500.0, 0.0);
     glVertex3f(0.0, 500.0, 0.0);
     // z
     glVertex3f(0.0, 0.0, -500.0);
     glVertex3f(0.0, 0.0, 500.0);

   glEnd(); 

编辑3 :此外,该形状的顶点都没有x,y或z值大于1.0 ..

2 个答案:

答案 0 :(得分:3)

  

我做错了什么?

我不是说你做错了什么。您希望在左窗格中显示的视图类型通常使用正交投影完成。你看到的扭曲只是透视扭曲;你没有看到垂直于曲线(曲线位于XY平面,你从某个角度看XY平面)。

旁注:

投影矩阵仅定义OpenGL的“镜头”。它不能用于放置“相机”。任何眼点定位(视图)都被定义为模型视图转换的一部分。因此,gluLookAt意味着在模型视图矩阵上使用。

答案 1 :(得分:0)

您的视锥体设置就好像屏幕是方形的。如果你的屏幕不是正方形,这会严重扭曲物体。

此外,如果物体靠近相机,近距离和远距离会影响图像。

还有一件事,你在gluLookAt中的向上轴指向下方。

发布屏幕截图有助于确定问题。