2012-04-27 16 views
9

Estoy tratando de usar tres JS para controlar una cámara en mi escena. Actualmente tengo la cámara configurada para orbitar en un círculo alrededor de mi objeto usando las teclas izquierda y derecha de mi teclado. Pero, ¿alguien sabe cómo haría el zoom? Aquí está mi código actual:cámara de acercamiento en tres JS sin controles trackball u otra biblioteca de control de cámara

camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000); 
camera.position.set(0,20,35); 
var rotSpeed = .02; 

function checkRotation(){ 

    var x = camera.position.x, 
     y = camera.position.y, 
     z = camera.position.z; 

    if (keyboard.pressed("left")){ //MH - find a way to do this in a switch statement 
     camera.position.x = x * Math.cos(rotSpeed) + z * Math.sin(rotSpeed); 
     camera.position.z = z * Math.cos(rotSpeed) - x * Math.sin(rotSpeed); 
    } else if (keyboard.pressed("right")){ 
     camera.position.x = x * Math.cos(rotSpeed) - z * Math.sin(rotSpeed); 
     camera.position.z = z * Math.cos(rotSpeed) + x * Math.sin(rotSpeed); 
    } else if(keyboard.pressed("up")){ 
     //zoom in 
    } else if (keyboard.pressed("down")){ 
     //zoom out 
    } 

    camera.lookAt(scene.position); 

} 

Respuesta

17

Si quieres un zoom real, sin mover la cámara, entonces se puede jugar con el campo de visión (FOV) de parámetros de la cámara:

camera.fov *= zoomFactor; 
    camera.updateProjectionMatrix(); 

Ver: http://jsfiddle.net/bvcCB/87/

Si desea mover la cámara cerca (o lejos) del objetivo, calcule el vector desde la posición de la cámara al objetivo y mueva la posición de la cámara a lo largo de ese vector.

+0

Ah! Intenté con el televisor pero olvidé actualizar la matriz de proyección. ¡Gracias! – mheavers

11

De r69 ahora se puede utilizar camera.zoom:

camera.zoom = zoomFactor; 
camera.updateProjectionMatrix(); 
+0

Gracias por '.UpdateProjectionMatrix()'! – LinusGeffarth