three.js obracają kamerę w płaszczyźnie

Mam kamerę w mojej aplikacji:

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

Te kody wrender funkcja musi obracać kamerę podczas naciskania klawiszy:

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

Kamera obraca się, ale nie tak, jak potrzebuję. Chcę, aby ta kamera obracała się jak w FPS (strzelanka pierwszoosobowa) w samolocie. Zobacz zdjęcie, aby zrozumieć, czego chcę ...
Próbuję użyćsin(1) icos(1) ale nie rozumiem jakrotateOnAxis działa, przyczynatranslate funkcje działają jak urok i poruszają kamerą w kierunku tego, co widzi.
P.S.
Tutaj jestdocs dothree.js może to pomaga.
Do obsługi zdarzeń klawiatury, których używamKeyboardJS
A tu jestdegInRad funkcjonować:

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

Przyłączać sięJSFiddle

O - pozycja kamery
O-O1 - aktualny kierunek kamery
R1 - bieżący kierunek obrotu
R - kierunek, co chcę
Przepraszam zadobry obrazek.

questionAnswers(2)

yourAnswerToTheQuestion