OpenGL - 透视问题
Posted
技术标签:
【中文标题】OpenGL - 透视问题【英文标题】:OpenGL - Perspective Issue 【发布时间】:2011-10-26 20:18:37 【问题描述】:我只想创建一个视角,相机的眼睛在,比如说:(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..
【问题讨论】:
你能发一张你得到的截图吗? @ChrisF:我已经发布了截图。 看起来您离对象有点太近了。将相机移远一点。 @ChrisF:根据我的编辑,我的最大顶点范围仅达到 (1,1,1),所以我认为离得更远没有帮助。我试过了,但它确实变小了。 现在没有想法了。什么是视野? 【参考方案1】:我做错了什么?
我不认为你做错了什么。您希望在左窗格中拥有的视图类型通常使用 正交 投影来完成。你看到的失真只是透视失真;您不是垂直于曲线看(曲线位于 XY 平面上,而您是从某个角度看 XY 平面)。
旁注:
投影矩阵只定义了OpenGL的“lens”。它不能用来放置“相机”。任何视点定位(view)都被定义为模型视图转换的一部分。因此gluLookAt
用于模型视图矩阵。
【讨论】:
【参考方案2】:您的截锥体设置得好像屏幕是方形的。如果您的屏幕不是方形的,这将严重扭曲对象。
此外,如果物体离您的相机很近,则近距和远距都会影响图像。
还有一件事,gluLookAt 中的向上轴指向下方。
张贴截图有助于找出问题。
【讨论】:
你的问题是你的上轴是错误的。将您的 gluLookAt 切换为 (-2,1,1,0,0,0,0,1,0) 它看起来是这样的,因为您实际上是在从屏幕截图下方查看对象。以上是关于OpenGL - 透视问题的主要内容,如果未能解决你的问题,请参考以下文章