gluLookAt的不连续性

时间:2011-12-05 06:52:06

标签: c++ opengl 3d rotation glulookat

这是我计算视线向量和向上矢量的方法。

    ly = sin(inclination);
    lx = cos(inclination)*sin(azimuth);
    lz = cos(inclination)*cos(azimuth);
    uy = sin(inclination + M_PI / 2.0);
    ux = cos(inclination + M_PI / 2.0)*sin(azimuth + M_PI);
    uz = cos(inclination + M_PI / 2.0)*cos(azimuth + M_PI);

倾角是来自xz平面的视线矢量的角度,方位角是xz平面中的角度。

这很好,直到我的倾斜度达到225度。此时由于某种原因,旋转存在不连续性。 (注意225度,我的意思是过去的颠倒点)

关于为什么会这样的任何想法?

编辑:没关系,想通了。方位角不需要180度。向上倾斜向上。

1 个答案:

答案 0 :(得分:1)

我认为你说的是​​90度(pi)的极限角。你得到的是一种正常的行为。使用gluLookAt时,指定一个“向上”向量,用于确定摄像机的滚动。在你正在向上看的特殊情况下,'向上'向量与眼睛方向向量平行,因此无法确定摄像机的滚动(这个问题是无数个解决方案,所以是任意一个由gluLookAt选择。也许你应该使用你的倾角和方位角来计算这个'向上'向量。