问题
我的场景中有一个three.js 对象,您可以使用three.TransformControls 旋转/缩放/移动。在场景中定位对象后,应该保存旋转/位置/缩放值。我得到值??像这样:
- // Position
- $scope.scene.updateMatrixWorld(true);
- var position = new THREE.Vector3();
- position.getPositionFromMatrix( $scope.object.matrixWorld );
- // Rotation
- var rotation = new THREE.Euler();
- $scope.object.getWorldRotation(rotation);
- // Size
- var size = new THREE.Box3().setFromObject($scope.object);
- var x = (size.max.x - size.min.x);
- var y = (size.max.y - size.min.y);
- var z = (size.max.z - size.min.z);
复制代码
因此,当我保存这些值并使用新值重新加载场景时,对象看起来确实与它们应有的不同。所以,我认为,函数传递的旋转/缩放/位置值是错误的。例如,size.z 变量应该始终为 0,但是当保存(并在控制台中打印该值)时,它会得到另一个值。
有谁知道为什么?
感谢您的帮助。
回答
js提供矩阵分解功能:
以下是如何使用它的示例:
- var translation = new THREE.Vector3();
- var rotationQ = new THREE.Quaternion();
- var scale = new THREE.Vector3();
- myObject.matrixWorld.decompose(translation, rotationQ, scale);
复制代码
如果要将旋转保存为欧拉:
var rotationE = new THREE.Euler().setFromQuaternion(rotationQ.normalize());
三.js r88
|