Vector 四元数旋转码

Vector 四元数旋转码,vector,3d,unity3d,quaternions,Vector,3d,Unity3d,Quaternions,我看过那段代码,但我不明白它到底在做什么,用数学的方式。 来源是自行车的3D模型。 normal来自地面的光线投射,mfrontweelnormal来自另一个光线投射 Quaternion rotFront = Quaternion.AngleAxis(Source.rotation.eulerAngles.y, normal) * Quaternion.FromToRotation(new Vector3(0, 1, 0),

我看过那段代码,但我不明白它到底在做什么,用数学的方式。 来源是自行车的3D模型。 normal来自地面的光线投射,mfrontweelnormal来自另一个光线投射

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

将此乘法看作两个单独的节点可能会有所帮助。这里有两个旋转

  • 由Quaternion.AngleAxis返回的一个(自行车在地面上的xz方向)
  • 由四元数返回的一个。FromToRotation(前轮的倾斜)
  • 假设1是2的父对象,1的旋转是2旋转的“外部”。我想象这个旋转前端应用于一个不是自行车本身的物体。在这种情况下,该对象实际上是2的子对象。此旋转可能使该对象具有与自行车前轮类似的旋转

    因此,这创建的运动与向具有2的旋转的对象添加父对象以及向具有1的旋转的对象添加父对象相同

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

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

    通过应用这两个参数,旋转为零的对象的方向与自行车的前轮相似。我不太清楚他们为什么不只用前轮的旋转。也许有了1,他们想确保他们得到的是自行车的xz方向,而不是前轮的方向。这可能是有意义的使用这个相机,你想让相机跟随自行车的身体,而不是前轮。也许使用前轮的倾斜可以使相机的运动看起来更酷。在我看来,他们在得出这个公式之前似乎做了一些尝试和错误


    我希望这有帮助。如果你能准确地告诉我法线和MFFrontWheelNormal是什么(好的光线投射,但从何处以及沿着什么向量?)以及rotFront的确切使用位置,我可以提供更多帮助

    它看起来像是应用了两个变换(旋转)。要想猜猜到底是什么,我应该了解更多FromToRotation的上下文和实现。我完全明白了。你能推荐一本书或什么东西来理解这些东西吗,我知道向量等等,但应用程序无法理解:(谢谢你的接受和善意的评论:)我很高兴能帮上忙。嗯,我希望我能推荐一本书,但我真的不知道哪本书好。这些年来,我在这里和那里学到了很多东西。我想我最好的建议是边做边学,多玩玩转换。如果你有任何问题,我很乐意帮忙。