我试图根据用户的位置实现场景的3D透视。我读到了非对称平截头体方法,当用户没有从轴上看时,可以实现失真。
我以前用于离轴投影的代码是:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(frustumLeft, frustumRight, frustumBottom, frustumTop, frustumNear, frustumFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, headZ);
drawWalls();
当用户正在查看轴时,场景将被绘制为:
当截头锥体偏离轴线时,场景将被绘制为:
然而,我期望在下面的图像中有所改变(通过使用gluLookAt和assymetric frustum实现)。 http://i40.tinypic.com/9uteh3.png
对于上面的程序,我使用assymetric frustum来指定观看体积和更改参数(第2张图片)只使场景看起来像一个小翻译(没有失真)。我想知道这是否是正确的行为,或者我是否错过了某些内容并且没有得到应该存在的场景中的失真(如第3张图像)。不应该单独扭曲视锥体给我扭曲的场景输出吗?
答案 0 :(得分:1)
如果我们改变相机位置或它看到的位置,那么我们对象的对称性会发生变化。 就像你在x轴上向左或向右移动你的头一样,你的计算机屏幕的对称性会发生变化。感觉就像有点倾斜。