[软件设计/软件工程] Three.js 对象返回错误位置/旋转/缩放值

[复制链接]
发表于 2022-5-6 13:41:42
问题
我的场景中有一个three.js 对象,您可以使用three.TransformControls 旋转/缩放/移动。在场景中定位对象后,应该保存旋转/位置/缩放值。我得到值??像这样:
  1. // Position
  2. $scope.scene.updateMatrixWorld(true);
  3. var position = new THREE.Vector3();
  4. position.getPositionFromMatrix( $scope.object.matrixWorld );

  5. // Rotation
  6. var rotation = new THREE.Euler();
  7. $scope.object.getWorldRotation(rotation);

  8. // Size
  9. var size = new THREE.Box3().setFromObject($scope.object);
  10. var x = (size.max.x - size.min.x);
  11. var y = (size.max.y - size.min.y);
  12. var z = (size.max.z - size.min.z);
复制代码

因此,当我保存这些值并使用新值重新加载场景时,对象看起来确实与它们应有的不同。所以,我认为,函数传递的旋转/缩放/位置值是错误的。例如,size.z 变量应该始终为 0,但是当保存(并在控制台中打印该值)时,它会得到另一个值。

有谁知道为什么?

感谢您的帮助。

回答
js提供矩阵分解功能:

以下是如何使用它的示例:
  1. var translation = new THREE.Vector3();
  2. var rotationQ = new THREE.Quaternion();
  3. var scale = new THREE.Vector3();

  4. myObject.matrixWorld.decompose(translation, rotationQ, scale);
复制代码

如果要将旋转保存为欧拉:

var rotationE = new THREE.Euler().setFromQuaternion(rotationQ.normalize());

三.js r88





上一篇:在 Node.js 中声明多个 module.exports
下一篇:使用 JavaScript 从另一个页面获取内容

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表