three.js повернуть камеру в плоскости

У меня есть камера в моем приложении:

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

Те код вrender Функция должна вращать камеру, пока я нажимаю клавиши:

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

Камера вращается, но не так, как мне нужно. Я хочу, чтобы камера вращалась как в FPS (шутер от первого лица) на самолете. Смотрите картинку, чтобы понять, чего я хочу ...
Я пытаюсь использоватьsin(1) а такжеcos(1) но не могу понять какrotateOnAxis работает, причинаtranslate функции работают как шарм и перемещают камеру в направлении, в котором она видит.
Постскриптум
Вотдокументы кthree.js возможно это поможет.
Для обработки событий клавиатуры я используюKeyboardJS
И вотdegInRad функция:

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

Ссылка наJSFiddle

O - положение камеры
O-O1 - текущее направление камеры
R1 - текущее направление вращения
R - Направление чего я хочу
Извини чтохороший рисунок.

Ответы на вопрос(2)

Ваш ответ на вопрос