2016-10-24 13 views
0

世界のマトリックスを変えてカメラを動かそうとしています。しかし、それは動作しないようです。カメラが何を動かずにいても。ThreeJS cant move camera

camera.matrixAutoUpdate = false 
camera.matrixWorld = portal_view(camera,port1_quad,port2_quad) 

私はmatrixupdate = trueを使用しようとしましたが、まだ何もしていません。何が間違っていますか?オブジェクトの

function portal_view(camera, src_portal, dst_portal) { 
       var inverse_view_to_source = new THREE.Matrix4().getInverse(camera.matrix).multiply(src_portal.matrix); 
       var new_mat = dst_portal.matrix.clone().multiply(inverse_view_to_source); 
       new_mat.makeRotationY(3.14); 

       return new_mat; 
      } 

答えて

0

matrixWorldそのpositionquaternionscaleから計算されます。オブジェクトの 'matrixWorld'を直接変更することはできません。つまり、matrixWorldを変更すると、オブジェクトのpositionに変更が反映されません。カメラのpositionを変更する必要があります。

可能なことは、マトリックスからtranslationrotationを抽出して、カメラpositionquaternionをそれに合わせて変更します。

+0

camera.updateMatrix()は行列を更新し、位置と回転が変更されます。今私は方程式に何が間違っているのか把握する必要があります。 –

+0

'Camera.updateMatrix()'または 'Object3D.updateMatrix()'は、オブジェクトの 'position'または' quaternion'を変更しません。現在の変換行列を現在の 'position'、' quaternion'、 'scale'を使って更新します。 –

+0

matrixWorldを変更すると完全に動作します。通話の更新はできません。変更を失うことになります。問題は実際にはportal_view関数にありました。 ThreeJSフレームワークはちょっと大変ですので、逆数や乗算や回転を呼び出すと常に値を変更することはありません。私は彼らが実際に働き始めるように彼らをぶち壊す必要があった。 背景のカメラでglUniformMatrix4fv(uniform_v_inv、1、GL_FALSE、viewMatrix)以上であるため、マトリックスワールドの作品を​​変更するのはなぜですか?またはそのようなものです。 ThreeJSカメラはちょっと使いやすいインターフェイスです。 –