three.js 如何将一个对象放置在另一个对象旁边(全局世界位置)
three.js How to position one object beside another (global world position)
我在场景中使用 objloader 加载了一个对象,稍后,我在场景中加载了第二个对象,但我想将其绝对位置更改为第一个对象的另一侧。
两个对象的所有位置都是相对于本地(0,0,0)的。
如何更改它的全局位置?
您可以放入场景中的每个对象都有一个 "position" 属性,它是一个三维向量。您可以简单地更改其 x/y/z 值。
例如,假设您的对象名为 "mesh":
mesh.position.x += 1; //you need re-render if you change something in the object after adding to the scene
yourScene.add(mesh);
这会将场景中的对象移动 "unit"。这意味着您可以这样做:
mesh2.position.x = mesh1.position.x + 1;
yourScene.add(mesh1);
yourScene.add(mesh2);
在这里您可以查看可用于放置在 THREE.js 场景中的对象的其他属性和方法:
我找到了答案:
object1.position.copy(object2.matrixWorld.getPosition());
davincy 发布的答案现已过时。在我的 threejs 版本中,它响应了这个警告:
THREE.Matrix4: .getPosition() has been removed. Use
Vector3.setFromMatrixPosition( matrix ) instead.
那么您需要将其替换为以下内容:
objectA.position.setFromMatrixPosition( objectB.matrixWorld );
其中 objectB 是场景中的对象,也是您希望 objectA 从中复制其位置的对象。
我在场景中使用 objloader 加载了一个对象,稍后,我在场景中加载了第二个对象,但我想将其绝对位置更改为第一个对象的另一侧。
两个对象的所有位置都是相对于本地(0,0,0)的。
如何更改它的全局位置?
您可以放入场景中的每个对象都有一个 "position" 属性,它是一个三维向量。您可以简单地更改其 x/y/z 值。
例如,假设您的对象名为 "mesh":
mesh.position.x += 1; //you need re-render if you change something in the object after adding to the scene
yourScene.add(mesh);
这会将场景中的对象移动 "unit"。这意味着您可以这样做:
mesh2.position.x = mesh1.position.x + 1;
yourScene.add(mesh1);
yourScene.add(mesh2);
在这里您可以查看可用于放置在 THREE.js 场景中的对象的其他属性和方法:
我找到了答案:
object1.position.copy(object2.matrixWorld.getPosition());
davincy 发布的答案现已过时。在我的 threejs 版本中,它响应了这个警告:
THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.
那么您需要将其替换为以下内容:
objectA.position.setFromMatrixPosition( objectB.matrixWorld );
其中 objectB 是场景中的对象,也是您希望 objectA 从中复制其位置的对象。