因为这是一个复杂的问题,通常会导致很多混淆(我以前问过类似的问题,但从未正确提出问题并得到答案),所以我将尽可能清楚地表达。
事实:
- 我正在使用Unity。
- 我可以轻松地从任何四元数旋转中获得前向、上方和右侧向量。
- 我不能简单地记录自己的欧拉角,修改它们并通过新的四元数应用旋转,因为对象受物理控制。
- 我对数学几乎一无所知,除非它是用代码(或伪代码)编写的,因此这对我来说最有益。
- 对我来说,C++风格的答案最容易理解,但我可以处理几乎任何类型的代码。
- 我不想让任何人为我编写代码! 我只是要求以代码或伪代码的形式回答,因为我从未学会读普通的数学符号;我是程序员,而不是数学家。
- Unity使用左手坐标系。 X = 右,Y = 上,Z = 前。
我想做什么:
我试图在人形骨骼结构上播放动画,并使用扭矩(旋转力)将物理布娃娃推到大致相同的姿势。
问题:
我可以完全使用四元数工作,直到需要将扭矩应用于刚体为止。 AddTorque
函数实际上以欧拉角工作,这意味着我不能使用四元数。 我可以轻松地从四元数中提取欧拉角,但它们不可靠并且会导致布娃娃严重抽搐。
我需要什么:
我需要计算可靠的三维欧拉角(即不会随机从+到-翻转)从前向、上方和右侧向量。 我意识到这有点复杂,但这就是为什么我在这里问:我缺乏解决这个问题所需的知识和经验。
鉴于向量本身是可靠的,我认为没有理由不能从它们中计算出可靠的欧拉角。 此外,我不知道我需要或需要哪种旋转顺序的欧拉角,但我相信稍后可以很容易地修改。
任何帮助都将不胜感激!