How to get angle of vector of camera movement

91 Views Asked by At

I have an animation of camera and I would to pass the angle of movement to 2d sprite shader. I'm guessing I should to project these 2 vectors to camera and then compute the angle, but it doesn't work.

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);
}
1

There are 1 best solutions below

2
On BEST ANSWER

I found an example with motion blur and took that algorithm. It works now. 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);
}