2017-11-27 9 views
0

私は現在、次のコードを持っている:Threejs Object3Dに絶対変換を設定するにはどうすればよいですか?

const scene = new THREE.Scene() 
const root = new THREE.Group() 
scene.matrixAutoUpdate = false 
root.matrixAutoUpdate = false 
scene.add(root) 

を私はrootノードの下の周りに移動したいオブジェクトを置きます。次の私は、問題は、これは効果がありませんということですMatrix4

を使用して、3D空間内の特定の位置にルートノードを設定する:

root.matrix = translationMatrix 
    root.updateMatrixWorld() 

と、次の私の行列の適用んが、それを上書きするのではなく、既存のトランスフォームの上に適用します。

root.applyMatrix(translationMatrix) 
    root.updateMatrixWorld() 

マトリックス全体を正しく自分のもので置き換えるにはどうすればよいですか?

+0

;'は、 'root.matrix.copy(translationMatrix)しようとしなかった;':matrixWorldを更新するtrueforceとしてパラメータを渡しますか? – Brakebein

+0

はい、同じことです。 –

答えて

0

コードを見ると、applyMatrix()は行列を位置、四元数、位取りに分解していることがわかります。手動でこれらのプロパティを設定することが重要であるかもしれない:

root.matrix = translationMatrix; 
root.matrix.decompose(root.position, root.quaternion, root.scale); 

もう一つ:matrixAutoUpdateまたはmatrixWorldNeedsUpdatefalseに設定されている場合updateMatrixWorld()は何もしません。代わりに、 `root.matrix = translationMatrixの

root.updateMatrixWorld(true); 
関連する問題