2016-03-28 6 views
0

Three.jsで同じ行列mulitiplyをする必要があります。私はObject3Dを持っていたし、これを行うとき、私はCONSOLE.LOGする権利行列を得る:オブジェクトからTHREE.js行列をコピーしてください

console.log (scene.getObjectByName("Pointer").matrix) 

結果は次のようである:

T ... E.Matrix4 {要素:[16] Float32Array} 要素:Float32Array [16] 0:11:02:03:04:05:16:07:08:09:0 10:11 1:0 12:-150 13:0 14:0 15:1

ここで、12番目の要素の値は-150です(obj.translationX(-150)の後)。 identiy行列をバック与える

 var newMat = new THREE.Matrix4(); 
     console.log(scene.getObjectByName("Pointer").matrix.elements) 
     // output: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] 
     newMat = newMat.copy(scene.getObjectByName("Pointer").matrix); 
     console.log(newMat); 
     // output:elements: Float32Array[16] 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 

(第12回要素の意味は次のとおりです。0)ここで間違っている

いただきましたか?

更新:内のレンダリングループ... newMat.copy(...)..うまく動作します!

+0

あなたが最初に私はこれがTHREE.Object3D –

+0

のようなコンテナオブジェクトで見ていupdateMatrixを呼び出して、オブジェクト名のポインターであるi)は、(オブジェクトubdateMatrixを試してみました...しかし、このdidntのは助けました。はいポインタはcontainerObjectです..ここで私はloadedJsonObjectを配置します – vagus1975

+0

child_clone.applyMatrix(container [i] .object3d.children [j] .parent.matrix); //これは悪い child_clone.applyMatrix(container [i] .object3d.children [j] .parent.parent.matrix); child_clone.applyMatrix(container [i] .object3d.children [j] .parent.parent.parent.matrix); child_clone.applyMatrix(container [i] .object3d.children [j] .parent.parent.parent.parent.matrix); child_clone.updateMatrixWorld() moralはparentから子のコンテナにマトリックスを適用し、次にupdateMatrixWorldを適用します(実際には私のマトリックスは更新されていません.3つのObject3Dコンテナの代わりに独自のオブジェクトを作成していました) –

答えて

0

three.jsは、オブジェクトの位置、スケール、回転に従ってページをレンダリングするときに、オブジェクトマトリックスを更新します。オブジェクト行列を設定すると、すぐに書き換えられます。 オブジェクト行列を手動で設定するには、自動更新をfalseに設定する必要があります。

あなたのコードを使用してください。

var newMat = new THREE.Matrix4(); 
    console.log(scene.getObjectByName("Pointer").matrix.elements) 
    // output: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] 
    newMat = newMat.copy(scene.getObjectByName("Pointer").matrix); 
    console.log(newMat); 
+0

Do not set 'matrixAutoUpdate = false'というのは、あなたがライブラリの内部動作に精通していなくて、そうすることの結果を理解していない限りです。 – WestLangley

関連する問題