我只想创建一个透视图,让相机的眼睛位于,比如说:(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..
最佳答案
What am I doing wrong?
我不认为你做错了什么。您希望在左 Pane 中看到的那种 View 通常使用正交 投影来完成。您看到的失真只是透视失真;您并不是垂直于曲线看(曲线位于 XY 平面内,而您是从某个角度看 XY 平面)。
旁注:
投影矩阵只定义了 OpenGL 的“lens”。它不得用于放置“相机”。任何视点定位( View )都被定义为模型 View 转换的一部分。因此,gluLookAt
旨在用于模型 View 矩阵。
关于c++ - OpenGL - 透视问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908377/