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 に答える