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 kameryO-O1
- aktualny kierunek kameryR1
- bieżący kierunek obrotuR
- kierunek, co chcę
Przepraszam zadobry obrazek.