三个JS云台锁定旋转

Three JS Gimbal Lock in rotation

本文关键字:锁定 旋转 JS 三个      更新时间:2023-09-26

看来三个JS中的四元数旋转并没有摆脱云台锁。

重现步骤:

1)打开三个JS编辑器。2) 添加一个圆柱体并将 z 的值设置为 1.57(旋转的中心文本框)。3)现在尝试更改y或x弧度的值(旋转的左或右文本框)。

您会看到 x 和 y 都在执行相同的旋转。任何想法如何避免这种情况?

AFAIK Three JS默认使用四元数,云台锁定仅在使用角时发生。

谢谢!

在代码中:尝试在三个js中修改对象的四元数属性,而不是旋转属性。像这样,您可以确保通过使用四元数来避免万向节锁定。

在编辑器中,您只能使用欧拉角进行编辑,并且由于许多欧拉角表示可能会导致相同的四元数,因此旋转是不明确的;

常规旋转 (mesh.rotation.set) 在观察网格对象时使用欧拉角。这将使用四元数将网格围绕 Y 轴旋转 90 度。

mesh.rotation.setFromQuaternion(some_quaternion, "XYZ", true);
var some_quaternion = new THREE.Quaternion();
some_quaternion.setFromAxisAngle(new THREE.Vector(0,1,0), Math.PI/2);