围绕绝对世界轴检索四元数角度
Posted
技术标签:
【中文标题】围绕绝对世界轴检索四元数角度【英文标题】:Retrieve quaternion angle around absolute world axis 【发布时间】:2013-07-16 10:37:32 【问题描述】:我有一个代表立方体旋转的四元数。这个立方体可以按顺序向左、上、右和下旋转,一次只能旋转 90 度,因此人们总是直视其中一张脸。使用 OpenGL 的右手坐标系,这是面向 +z 的表面,看着屏幕。
我想检索立方体的“滚动”。即当前面向世界 +z 的面围绕这个绝对 z 轴旋转了多少。
有人能解释一下解决这个问题的最佳方法是什么吗?转换为欧拉角(这似乎不是正确的选择)?做一些花哨的四元数数学?我已经尝试了各种代码 sn-ps,但在这里是我的最后一根稻草。
【问题讨论】:
【参考方案1】:每个面都有一个法线(向量,相对于立方体的局部空间,从面直接指向外面)。这在数学上是明确的。不过,听起来,就像您还希望每个面都具有“直立”方向 - 就好像立方体是一个骰子,每个面都有一个具有特定这种方式的数字 - 这本质上不是一个属性一张脸,但你可以继续定义一张脸。将特定面的“直立”向量视为在立方体的局部空间中从骰子数字的底部指向顶部的向量。
所以现在你有六个面法线,以及它们对应的六个垂直向量。您还拥有查看器的世界空间“向后矢量”和“垂直矢量”,分别是 +Z 和(可能)+Y。从这里开始很容易:
-
通过模具的方向变换六个面法线,看看哪一个产生 +Z。
通过模具的方向变换该面的垂直矢量。
使用
atan2(dot(+Z, cross(+Y, faceUprightWS)), dot(+Y, faceUprightWS))
,在+Y 和人脸的世界空间垂直向量之间找到关于+Z 轴的有符号角度。
【讨论】:
角度是顺时针的,而在右手系统中它们通常是逆时针的,所以我不得不翻转它们。它们也有半个 pi 的偏移量,但除此之外:完美!非常感谢,本,我已经被这个问题困住了。 哈,对不起。 atan2 的参数应该交换(就像我刚才的编辑一样);这将负责CCW-ness和偏移量。但很高兴它有帮助!以上是关于围绕绝对世界轴检索四元数角度的主要内容,如果未能解决你的问题,请参考以下文章