像Transform.RotateAround()一样使用Quaternion.Slerp()

时间:2016-07-15 13:58:34

标签: unity3d rotation interpolation quaternions

如果我的问题令人困惑,我提供了一个视频演示。

我选择更换相机装置以围绕球体旋转以使用Quaternion.Slerp。到目前为止,我已经主要成功,但我正在努力实现一定的轮换。

对于y移动,我使用此代码:

currentRotation = perspective.transform.localRotation;
goalRotation = currentRotation * Quaternion.Euler (controlInput.y * speed.y * 90 * draggable.transform.forward);
perspective.transform.rotation = Quaternion.Slerp (currentRotation, goalRotation, Time.deltaTime);

就我而言,y运动是正确的。 X运动虽然有点棘手。因为它是一个摄像机装备,我不想围绕物体摆动,而是旋转物体。所以我不能使用这段代码:

currentRotation = perspective.transform.localRotation;
goalRotation = currentRotation * Quaternion.Euler(controlInput.x * speed.x * 180 * draggable.transform.up);
perspective.transform.rotation = Quaternion.Slerp (currentRotation, goalRotation, Time.deltaTime);

把它想象成火箭联盟的主菜单,除了汽车之外,我们有一个球体。

Sketch of the idea.

this video中,我演示了使用RotateAround()的旧功能以及它与我当前的Slerp()技术的比较。

所以我的问题是,我怎样才能以类似于RotateAround的方式使用Slerp?我已经尝试了几种不同载体的交叉产物,但由于交叉积不是常数,这显然不是如何构造四元数。

我不怕复杂的数学,但我不想听到“不要使用四元数”作为答案。

0 个答案:

没有答案