我有一些从 STEP 文件转换中获得的自定义几何形状,我使用鼠标旋转它们。它们围绕场景的原点旋转,但由于它们距离场景的原点很远,所以它们看起来像是在虚拟球体上旋转。我怎样才能将它们移动到原点,这样它们就不会看起来“漂浮”(我的意思是我想将虚拟球体的半径减小到零)。 这是我想要移动的示例。我尝试将他们的位置设置为 (0, 0, 0) :
object.position.x = 0;
object.position.y = 0;
object.position.z = 0;
但是没用。
此问题的典型解决方案是在创建几何图形后立即对其进行平移。您可以通过将平移矩阵应用于几何图形来实现这一点,如下所示:
geometry.applyMatrix( new THREE.Matrix4().makeTranslation( distX, distY, distZ ) );
编辑:你可以简单地这样做:
geometry.translate( distX, distY, distZ ); // three.js r.72
功能
geometry.computeBoundingBox()
可能会帮助您确定翻译金额。
但是,我看到在你的情况下,你有多个几何形状,所以它有点复杂,但可行。您需要将每个几何体平移相同的量。
编辑
提示:不要将每个对象添加到场景中,而是创建一个父对象,将其添加到场景中,然后将对象添加到父对象中。
const parent = new THREE.Object3D();
scene.add( parent );
parent.add( object1 );
parent.add( object2 );
// and so on...
然后在渲染函数中,只需旋转父对象,而不是单个对象。