使用OpenGL作为渲染引擎我试图生成一个旋转矩阵,该矩阵将网格放置在给定位置的球体表面上。最初我试图通过计算给定位置的球体曲面法线并将其用作我的网格up
向量来做到这一点。
这很有效,但事实很复杂,因为我还希望能够使用绝对yaw
,pitch
和roll
值来旋转网格 - 其中一个{ {1}}为0将始终使网格向北(0,1,0)向北方向。
我对如何实现这一点有一个心理障碍,并希望得到任何意见。
使用Ripi2提供的解决方案进行更新:
yaw
答案 0 :(得分:1)
让我们在地球"上工作。其旋转轴(r)从南极到北极。表面的法线(n)进入" out"地球
叉积e= r x n
给出一个向东的向量。
叉积d= n x e
给出一个向北的向量。
使用e, n, d
的标准化版本并转换为曲面中的点,您可以构建lookAt
矩阵(请参阅here)。
up = n
和f= center-eye = d
以及s = e
。请注意,您可能希望更改f
符号,因为这不是真实的' lookAt'变换,它没有看,但只是找到。
现在,如果您的网格可以被视为与第一个球体同心的另一个球体,则所有旋转都必须位于两个球体的共享中心之上。旋转轴,始终保持向北和#34;可以是"地球轴" (r)和#34;向东走去" (E)。使用' e'你以某种方式失去北方,矢量去#34;内部"球体。角度可以从交叉积计算,因为c= a x b
然后是|c| = |a|·|b|·sin(beta)
。