three.js pivoter la caméra dans le plan

J'ai un appareil photo dans mon application:

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
camera.position.z = 1;
camera.position.y = -5;
camera.rotateOnAxis(new THREE.Vector3(1, 0, 0), degInRad(90));
camera.up = new THREE.Vector3(0, 0, 1);  

Ceux du code dans render fonction doit tourner la caméra pendant que je suis en appuyant sur les touches:

if (leftPressed) {
    camera.rotateOnAxis((new THREE.Vector3(0, 1, 0)).normalize(), degInRad(1));
} else if (rightPressed) {
    camera.rotateOnAxis((new THREE.Vector3(0, 1, 0)).normalize(), degInRad(-1));
}
if (upPressed) {
    camera.rotateOnAxis((new THREE.Vector3(1, 0, 0)).normalize(), degInRad(1));
} else if (downPressed) {
    camera.rotateOnAxis((new THREE.Vector3(1, 0, 0)).normalize(), degInRad(-1));
}  

Caméra tourne, mais pas de la manière dont j'ai besoin. Je veux que la caméra tourne, comme dans les FPS (first person shooter) sur le plan. Voir la photo pour comprendre ce que je veux...
Je suis d'essayer d'utiliser sin(1) et cos(1), mais ne peut pas comprendre comment rotateOnAxis œuvres, cause translate fonctions de travail comme un charme et mouvements de la caméra dans la direction de ce qu'elle voit.
P. S.
Voici une docs à la three.js peut-être que ça aide.
Pour gérer les événements de clavier j'utilise KeyboardJS
Et voici une degInRad fonction:

function degInRad(deg) {
    return deg * Math.PI / 180;
}  

Lien sur JSFiddle

three.js pivoter la caméra dans le plan

O - position de la caméra
O-O1 - actuelle direction de la caméra
R1 - courant du sens de rotation
R sens de ce que je veux
Désolé pour bonne image.

Envisager, au lieu de cela, utiliser, modifier, THREE.PointerLockControls. Voir threejs.org/examples/misc_controls_pointerlock.html. Remarque dans le pointeur-lock code source de la façon dont la caméra est ajoutée comme un enfant ou petit-enfant de 2 objets pour obtenir l'effet que vous voulez.
c'est sympa le lien, merci, mais je n'ai pas besoin de déplacer la caméra avec la souris. Et camera utilise uniquement dans controls = new THREE.PointerLockControls( camera ); scene.add( controls.getObject() ); - c'est PointerLockControls objet interne ajoute à la scène, pas camera lui-même et dans onWindowResize fonction de l'application de nouvelles propriétés, et dans renderer.render( scene, camera ); - ici est d'utiliser d'origine camera variable. Sur ce child/grandchild Vous parlez? Je ne comprends vraiment pas, pouvez-Vous expliquer? Merci à l'avance.
Remarquez comment PointerLockControls fait pivoter la caméra comme vous le souhaitez, sauf qu'il utilise la souris, au lieu du clavier. Pour obtenir cet effet, il utilise le pitchObject et yawObject technique. Voir le code source. C'est ce que je voulais dire par child/grandchild. Vous n'avez pas à utiliser l' PointerLockControls; vous pouvez mettre en œuvre une logique similaire vous-même.
c'est mon échec. Je ne vois pas le code source de PointerLockControls sur la page. Maintenant, je donne un essai et si tout le bien que je donne une réponse à une question, ou Vous demander si j'ai fait une erreur.
J'ai écrit de travail exemple . Mais je ne comprends pas pourquoi les développeurs de three.js l'utilisation de ces pitchObject.rotation.x = Math.max( - PI_2, Math.min( PI_2, pitchObject.rotation.x ) ); de la construction dans le code. Quand je décommentez cette ligne dans mon code mobile vertical œuvres mauvaises. Pouvez-vous expliquer? Merci.

OriginalL'auteur ostapische | 2013-09-16