【问题标题】:Quaternions rotation code四元数旋转代码
【发布时间】:2014-04-09 14:43:08
【问题描述】:

我已经看过那段代码,但我不明白它实际上在做什么,以数学方式。 来源是自行车的 3D 模型。 法线来自投射到地面的光线,mFrontWheelNormal来自另一条光线投射。

Quaternion rotFront =
        Quaternion.AngleAxis(Source.rotation.eulerAngles.y, normal) *
                Quaternion.FromToRotation(new Vector3(0, 1, 0),
                                          mFrontWheelNormal.GetVector3());

【问题讨论】:

  • 看起来像是应用了 2 次变换(旋转)。要猜它到底是什么,我应该了解更多 FromToRotation 的上下文和实现

标签: vector 3d unity3d quaternions


【解决方案1】:

将此乘法视为两个独立的节点可能会有所帮助。你这里有两个轮换

  1. Quaternion.AngleAxis 返回的那个(自行车在地面上的 xz 方向)
  2. Quaternion.FromToRotation 返回的那个(前轮的倾斜度)

假设 1 是 2 的父节点,并且 1 的旋转在 2 的旋转“外部”。我想这个 rotFront 被应用到一个不是自行车本身的物体上。在这种情况下,该对象实际上是 2 的孩子。这种旋转可能使该物体具有与自行车前轮相似的旋转。

因此,这创建的运动等同于将父对象添加到具有 2 的旋转的对象,并将父对象添加到具有 1 的旋转的 2。

2 是当应用于 +y 向量时的旋转,它将使它变得像前轮的法线向量(我假设这是地面上的法线)。它的目的是像前轮一样倾斜物体。

1 是随着自行车的 y 旋转围绕“正常”旋转。其目的是将地面上的物体定向到自行车所面对的相同 xz 方向。

通过应用这两个,零旋转的对象变得像自行车的前轮一样定向。我不完全确定他们为什么不只使用前轮的旋转。也许对于 1,他们想确保获得自行车的 xz 方向而不是前轮的方向。将其用于相机可能是有意义的,您希望相机跟随自行车的车身,而不是前轮。也许使用前轮的倾斜会使相机运动看起来更酷。对我来说,听起来他们在得出这个公式之前做了一些试验和错误。

我希望这会有所帮助。如果您准确地告诉我 normal 和 mFrontWheelNormal 是什么(好的光线投射,但是从哪里以及沿着什么向量?)以及 rotFront 到底在哪里使用,我可以提供更多帮助。

【讨论】:

  • 惊人的解释。我完全明白了。你会推荐一本书或其他东西来理解那些东西,我知道向量,..等等,但应用程序无法得到它:(
  • 感谢您的接受和友好的评论 :) 很高兴我能提供帮助。好吧,我希望我能推荐一本书,但我真的不知道哪本书好。这些年来,我在这里和那里学到了大部分这些东西。我想我最好的建议是边做边学,多玩转换。如果您有任何问题,我很乐意为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2020-04-11
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多