gluLookAt 中的不连续性
Posted
技术标签:
【中文标题】gluLookAt 中的不连续性【英文标题】:Discontinuity in gluLookAt 【发布时间】:2011-12-05 06:52:06 【问题描述】:这就是我计算视线向量和向上向量的方法。
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】:我认为您说的是 90 度 (pi) 的极限角。你得到的是正常的行为。使用 gluLookAt 时,您指定一个“向上”向量,用于确定相机的滚动。在您倒置的特殊情况下,“向上”向量与眼睛方向向量平行,因此无法确定相机的滚动(这个问题是无限数量的解决方案,因此是任意一个由 gluLookAt 选择)。也许你应该使用你的倾角和方位角来计算这个“向上”向量。
【讨论】:
抱歉不清楚,(lx,ly,lz) 是我的视线向量,(ux,uy,uz) 是我的向上向量。也就是说,我确实为每次倾斜重新计算我的向上向量。移除 180 度倾斜使得向上矢量完美地工作。以上是关于gluLookAt 中的不连续性的主要内容,如果未能解决你的问题,请参考以下文章