Three.js - 我可以将位置、旋转和缩放“应用”到几何体上吗?

17
我想编辑一个对象的位置、旋转和缩放向量,然后将它们“应用”到几何体上,这将使这些向量归零,但保留变换。例如,我导入一个边长为1的立方体,其最小和最大顶点位于(0, 0, 0)和(1, 1, 1)处。我将对象的比例设置为(2, 2, 2),然后将变换应用到几何体上。应用后,比例重置为(1, 1, 1),立方体的最小和最大顶点分别为(0, 0, 0)和(2, 2, 2)。是否有一些内置的方法来实现这个功能?
2个回答

32
你可以直接将对象的变换应用于对象的几何形状,然后重置位置、旋转和缩放,方法如下:
object.updateMatrix();

object.geometry.applyMatrix4( object.matrix );

object.position.set( 0, 0, 0 );
object.rotation.set( 0, 0, 0 );
object.scale.set( 1, 1, 1 );
object.updateMatrix();

three.js r.150


1
如何对一个包含THREE.Group()的THREE.Group()进行操作? - Amritesh Anand
@AmriteshAnand 如果你有问题,你需要发布一个新的帖子并展示你的代码。 - WestLangley
这对于现代的three.js仍然正确吗?当我尝试在Mesh实例上执行此操作时,它只会将所有内容重置回旋转之前的状态。我应该注意到,我用applyMatrix4替换了applyMatrix,因为applyMatrix似乎不再存在。 - aggregate1166877
@aggregate1166877 谢谢。方法名已更新。 - WestLangley

0

另一种解决方案是创建一个包装对象,其中子对象将具有默认的旋转、位置和比例:

const ChildObject = load(/*...*/);
ChildObject.rotation.set(90, 0, 0); // default rotation goes here
const MainObject = new THREE.Object3D();
MainObject.add(ChildObject);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接