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
- Направление чего я хочу
Извини чтохороший рисунок.