Three.js - 将自定义几何体移动到原点

ale*_*oli 8 rotation three.js

我有一些从STEP文件转换获得的自定义几何,我用鼠标旋转它们.它们围绕场景的原点旋转,但由于它们远离它,它们似乎在虚拟球体上旋转.如何将它们移动到原点以使它们看起来不"浮动"(我的意思是我想将虚拟球体的半径减小到零).这是我想要移动的例子.我已经尝试将他们的位置设置为(0,0,0):

object.position.x = 0;
object.position.y = 0;
object.position.z = 0;
Run Code Online (Sandbox Code Playgroud)

但它没有用.

Wes*_*ley 30

此问题的典型解决方案是在创建几何体后立即进行平移.您可以通过将转换矩阵应用于几何体来实现,如下所示:

geometry.applyMatrix( new THREE.Matrix4().makeTranslation( distX, distY, distZ ) );
Run Code Online (Sandbox Code Playgroud)

编辑:你可以这样做,而不是:

geometry.translate( distX, distY, distZ ); // three.js r.72
Run Code Online (Sandbox Code Playgroud)

该功能geometry.computeBoundingBox()可能有助于您确定要翻译的金额.

但是,我看到你的情况,你有多个几何,所以它有点复杂,但可行.您需要将每个几何体转换为相同的量.

编辑

提示:不是将每个对象添加到场景中,而是创建父对象,将其添加到场景中,然后将对象添加到父对象.

var parent;

parent = new THREE.Object3D();
scene.add( parent );

parent.add( object1 );
parent.add( object2 );
// and so on...
Run Code Online (Sandbox Code Playgroud)

然后在渲染函数中,只旋转父对象,而不是单个对象.