2016-12-23 10 views
2

カメラのアニメーションがあり、2dスプライトシェーダに動きの角度を渡します。私はこれらの2つのベクトルをカメラに投影してから角度を計算する必要があると推測していますが、動作しません。カメラの動きのベクトルの角度を取得する方法

let prevCameraVector = null; 
function tick() { 
    if(prevCameraVector && !prevCameraVector.equals(camera.position)) { 
    let vector1 = prevCameraVector; 
    let vector2 = new THREE.Vector3(camera.position.x, camera.position.y, camera.position.z); 

    vector1.project(camera); 
    vector2.project(camera); 
    let angle = vector1.angleTo(vector2); 

    uniforms.uRotate.value = angle; 
    } 
    prevCameraVector = new THREE.Vector3(camera.position.x, camera.position.y, camera.position.z); 
} 

答えて

0

私はモーションブラーの例を見つけ、そのアルゴリズムを採用しました。それは今働く。 http://www.zeropointnine.com/blog/motion-blur-shader/

let prevCameraVector = null; 
function tick() { 
    if (prevCameraVector && !prevCameraVector.equals(camera.position)) { 
     let vector1 = prevCameraVector; 
     let vector2 = new THREE.Vector3(camera.position.x, camera.position.y, camera.position.z); 

     vector1.project(this.camera); 
     vector2.project(this.camera); 

     vector2.sub(vector1); 
     vector2.y *= window.innerWidth/window.innerHeight; 
     let angle = Math.atan2(vector2.x, vector2.y); 

     uniforms.uRotate.value = angle; 
    } 
    prevCameraVector = new THREE.Vector3(camera.position.x, camera.position.y, camera.position.z); 
} 
+0

は何回毎秒あなたは新しい 'Vector3'sをインスタンス化していますか? 1つか2つ作成して再利用してください。また、 'vec.copy(camera.position)'を使うこともできます。 – WestLangley

+0

これは 'requestAnimationFrame'を呼び出します。そうすれば、少しパフォーマンスが低下する可能性があります。あなたのヒントありがとう! – RED

関連する問題