1

我试图根据用户的位置实现场景的 3D 透视。当用户不从轴上看时,我读到了不对称截锥体方法来实现失真。

我用来做离轴投影的代码是:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
    glFrustum(frustumLeft, frustumRight, frustumBottom, frustumTop, frustumNear, frustumFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, headZ);
drawWalls();

当用户查看轴时,场景被绘制为: 在此处输入图像描述

当截锥体偏离轴时,场景被绘制为: 在此处输入图像描述

然而,我期望的结果有点像下图(通过使用 gluLookAt 和不对称截头锥实现)。 在此处输入图像描述

对于上述程序,我仅使用不对称平截头体来指定查看体积,并且更改参数(第二张图像)仅使场景看起来有点平移(无失真)。我想知道这是否是正确的行为,或者我是否错过了某些东西并且没有在场景中得到应该存在的失真(如第三张图像)。不应该只用倾斜的截锥体给我扭曲的场景输出吗?

4

1 回答 1

1

截锥体就像透视图,除了透视图总是对称的事实,如果你使截锥体不对称,它将显示与图 2 中相同的效果。现在第二张图像发生的情况是它的左侧有更多的视图体积与之相比向右,所以如果图像在中间,它将向右移动。此处显示的示例image-frustum与左侧相比,右侧的视图体积更大,因此看起来对象被推向左侧,因为右侧体积现在占用更多空间。

如果我们改变相机位置或它看到的地方,那么我们物体的对称性就会改变。就像你在 x 轴上向左或向右移动你的头一样,你的电脑屏幕的对称性会改变。感觉有点歪斜。

于 2013-05-27T12:55:38.080 回答