如何将THREE.js摄像机或物体的旋转与来自统一GameObject的转换相匹配?
统一使用一个具有ZXY欧拉顺序的左手系统.THREE.js使用一个带有XYZ顺序的右撇子系统.
要将GameObject.transform.rotation (四元数)转换为Object3D.rotation (THREE.Vector3),需要进行哪些转换?
发布于 2013-08-07 16:50:36
最后,我们按照以下方式解决了这个问题:
假设您从统一的四元数中得到qx、qy、qz和qw,我们将在JavaScript /Three.JS中应用下面的转换:
// convert Quaternion from Left-handed coordinate system to Right-handed
var q = new THREE.Quaternion( -qx, qy, qz, -qw );
var v = new THREE.Euler();
v.setFromQuaternion( q );
v.y += Math.PI; // Y is 180 degrees off
v.z *= -1; // flip Z
object.rotation.copy( v );在所有轴的旋转和方向上正确工作。
three.js r.59号
发布于 2018-10-26 21:23:58
关键是匹配模型的初始加载位置之间的单位和三个is。接受的答案可能只适用于其中一场比赛,但不适用于所有比赛。
以下是两个例子:
示例1:单元初始加载位置为x-左、y-向上和z-正向。

要转换为three.js:
位置:翻转x,因为那是唯一不同的轴。
旋转:如果有四元数,将其转换为Euler,然后翻转旋转的y和z分量,然后将顺序设置为"ZXY“。我们要翻转y和z的原因是,在这个样本中,单位和三个y和z轴是在相同的方向上旋转的,所以它们在相反的方向旋转;翻转确保它们在相同的方向旋转。顺序被设置为"ZXY“,因为这是顺序单位是旋转的。
示例2:单元初始加载位置为x-右、y-向上和z-向后。

要转换为three.js:
位置:翻转z,因为那是唯一不同的轴。
旋转:四元数->欧拉,翻转x,y,设置顺序为"ZXY“。和上面的推理一样。
正如您可以从这两个例子中看到的,模型的起始位置以单位和three.js的形式影响着我们如何转换它们之间的位置和旋转。
发布于 2013-08-05 20:07:37
如果将这两种旋转转换为四元数,我认为区别是X轴上的a -1标度。
https://stackoverflow.com/questions/18066581
复制相似问题