这就是我计算视线矢量和向上矢量的方式。
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度。向上倾斜向量。
最佳答案
我认为您是在说90度(pi)的极限角。您得到的是正常行为。使用gluLookAt时,您可以指定一个“向上”向量,用于确定相机的侧倾。在特殊情况下,当您颠倒看时,“向上”矢量与眼睛方向矢量平行,因此无法确定相机的侧倾(此问题为无数个解决方案,因此可以任意选择由gluLookAt选择)。也许您应该使用您的倾斜度和方位角来计算此“向上”向量。
关于c++ - gluLookAt中的不连续性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8381915/