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 中的不连续性的主要内容,如果未能解决你的问题,请参考以下文章

用户定义的函数,它接受 Excel VBA 中的连续和不连续范围

计算连续日期,不包括 SQL 中的周末

如何优化 R 中的整数参数(和其他不连续参数空间)?

MYSQL计算连续与不连续区间的方法

更新不连续/跳过 Id 表中的特定列

处理 sklearn.tree.DecisionTreeClassifier 中的连续变量