[英]Three.js add an object to a group but keep global position/rotation/scale as it was
[英]Three.js object returns wrong values for position/rotation/scale
我的场景中有一个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,但在保存(并在控制台中打印该值)时,它会获得另一个值。
有谁知道为什么?
谢谢你的帮助。
Three.js 提供了矩阵分解功能: https ://threejs.org/docs/#api/math/Matrix4.decompose
以下是如何使用它的示例:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.