オブジェクトにobjloaderオブジェクトを1つロードし、後で別のオブジェクトをシーンにロードしますが、別のオブジェクトに絶対位置を変更したい私の最初のオブジェクトの。three.jsオブジェクトを別の場所に配置する方法(グローバルワールド位置)
両方のオブジェクトのすべての位置は、ローカル(0,0,0)に相対的です。
どのようにグローバルポジションを変更できますか?
オブジェクトにobjloaderオブジェクトを1つロードし、後で別のオブジェクトをシーンにロードしますが、別のオブジェクトに絶対位置を変更したい私の最初のオブジェクトの。three.jsオブジェクトを別の場所に配置する方法(グローバルワールド位置)
両方のオブジェクトのすべての位置は、ローカル(0,0,0)に相対的です。
どのようにグローバルポジションを変更できますか?
object1.position.copy(object2.matrixWorld.getPosition());
シーンに配置できるすべてのオブジェクトには、3次元ベクトルである「位置」プロパティがあります。単純にx/y/zの値を変更することができます。あなたのオブジェクトを指定して、例えば
は、「メッシュ」と呼ばれている:
mesh.position.x += 1; //you need re-render if you change something in the object after adding to the scene
yourScene.add(mesh);
これは、シーン上のオブジェクトの一つの「単位」に移動します。あなたはTHREE.jsシーンに置くことができるオブジェクトのために利用可能な他のプロパティとメソッドを確認することができます。ここ
mesh2.position.x = mesh1.position.x + 1;
yourScene.add(mesh1);
yourScene.add(mesh2);
:これは、あなたがそれを行うことができることを意味し
:私は私の答えを見つけた私はそれを知っていますが、このオブジェクトを横に動かすために私の他のオブジェクトの位置を取得したい... – davincy
あなたはあなたが持っているいくつかのコードを表示してください?あなたを助けることはずっと簡単です。基本的な原則は、オブジェクトの位置ベクトルにアクセスすることです、これは唯一の場所three.jsが位置を格納しています。オブジェクトに直接ハンドルを持たず、シーンの子供を通過して目的のものを見つけたら、シーンにアクセスすることもできます。しかし、コードなしでは、あなたが苦労している問題が何であるかを推測するのは難しいかもしれません。 – Scharnvirk
残念ながら、私が試したものはすべて動作していないので、コードはありません。常に0を返します。基本的には、あるオブジェクトのワールドxの位置(シーン上)を別のオブジェクトに設定しようとします。ええと ? – davincy
davincyが投稿した回答は現在古くなっています。私のバージョンのthreejsでは、この警告で応答しました:
THREE.Matrix4:.getPosition()は削除されました。代わりに Vector3.setFromMatrixPosition(matrix)を使用してください。
それでは次でそれを交換する必要があります:
objectA.position.setFromMatrixPosition(objectB.matrixWorld);
ObjectBには、シーンとあなたはObjectAにはからその位置をコピーしたいオブジェクトであるオブジェクトです。
関連するコードを追加できますか?助けを得ることはそう簡単かもしれません。 –
これはうまくいかないが、アイデアはここにある:object1.position.set(object2.position.copy);私はmatrixWorld.getPosition()またはlocalToWorldを試してみました。常に相対位置(0,0,0)を返します – davincy