9

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

object.position.x = 0;
object.position.y = 0;
object.position.z = 0;

但它没有用。

4

1 回答 1

32

此问题的典型解决方案是在创建几何图形后立即对其进行平移。您可以通过将平移矩阵应用于几何体来做到这一点,如下所示:

geometry.applyMatrix( new THREE.Matrix4().makeTranslation( distX, distY, distZ ) );

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

geometry.translate( distX, distY, distZ ); // three.js r.72

该功能geometry.computeBoundingBox()可能有助于您确定要翻译的数量。

但是,我在您的情况下看到,您有多个几何形状,因此它有点复杂,但可行。您需要将每个几何图形平移相同的量。

编辑

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

var parent;

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

parent.add( object1 );
parent.add( object2 );
// and so on...

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

于 2012-10-11T08:53:02.700 回答