因为这是一个复杂的问题,通常会导致很多混乱(我之前已经问过这个问题的变体,但从来没有以正确的方式问过这个问题,也没有得到答案),我会尽量让这个问题变得清晰可能的。
事实:
- 我正在使用统一。
- 我可以从任何四元数旋转中轻松获得 Forward、Up 和 Right 向量。
- 我不能简单地记录自己的欧拉角,修改它们并通过新的四元数应用旋转,因为对象是由物理控制的。
- 除非它是用代码(或伪代码)编写的,否则我根本不懂数学,所以这对我最有利。
- C++ 风格的答案对我来说是最容易理解的,但我几乎可以编写任何类型的代码。
- 我不是想让任何人为我编写代码!我只在代码或伪代码中寻求答案,因为我从未学会阅读普通的数学曲线;我是程序员,不是数学家。
- Unity 使用左手坐标系。X = 右,Y = 上,Z = 前。
我正在尝试做的事情:
我正在尝试在人形骨骼结构上播放动画,并使用扭矩(旋转力)将物理布娃娃推入与骨骼结构大致相同的姿势。
问题:
我可以在四元数中完全工作,直到我需要将扭矩施加到刚体上。该AddTorque
函数在欧拉角中有效工作,这意味着我不能使用四元数。我可以很容易地从四元数中提取欧拉角,但它们不可靠并且会导致布娃娃严重喷出。
我需要的:
我需要从 Forward、Up 和 Right 向量计算可靠的 3D Euler 角(例如,不会从 + 翻转到 - “随机”的那些)。我意识到这有点复杂,但这就是我在这里问的原因:我缺乏自己解决这个问题的知识和经验。
鉴于向量本身是可靠的,我认为没有理由不能从它们中计算出可靠的欧拉角。另外,我不知道欧拉角我想要或需要什么旋转顺序,但我相信以后修改它会相当容易。
任何帮助将非常感激!