我只想创建一个透视图,在这个视角中,相机的眼睛会在:(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轴扫描的轮廓曲线。它应该是透视图中的圆柱体,但它是......扭曲的。
编辑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 ..
答案 0 :(得分:3)
我做错了什么?
我不是说你做错了什么。您希望在左窗格中显示的视图类型通常使用正交投影完成。你看到的扭曲只是透视扭曲;你没有看到垂直于曲线(曲线位于XY平面,你从某个角度看XY平面)。
投影矩阵仅定义OpenGL的“镜头”。它不能用于放置“相机”。任何眼点定位(视图)都被定义为模型视图转换的一部分。因此,gluLookAt
意味着在模型视图矩阵上使用。
答案 1 :(得分:0)
您的视锥体设置就好像屏幕是方形的。如果你的屏幕不是正方形,这会严重扭曲物体。
此外,如果物体靠近相机,近距离和远距离会影响图像。
还有一件事,你在gluLookAt中的向上轴指向下方。
发布屏幕截图有助于确定问题。