J'ai une caméra dans mon application:Three.js Faire pivoter la caméra dans le plan
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 code render
fonction doit faire pivoter 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 FPS (First Person Shooter) dans l'avion. Voir l'image pour comprendre ce que je veux ...
Je suis d'essayer d'utiliser sin(1)
et cos(1)
, mais je ne comprends pas comment fonctionne rotateOnAxis
, car translate
fonctions fonctionnent comme un charme et déplace la caméra dans la direction de ce qu'elle voit.
P.S.
Voici un docs au three.js
peut-être que cela aide.
Pour gérer les événements clavier que j'utilise KeyboardJS
Et voici une fonction degInRad
:
function degInRad(deg) {
return deg * Math.PI/180;
}
Lien sur JSFiddle
O
- position de la caméra
O-O1
- direction actuelle de la caméra
R1
- direction de rotation actuelle
R
- direction ce que je veux
Désolé pour bonne photo.
Tenez compte, au lieu, à l'aide/modification, 'THREE.PointerLockControls'. Voir http://threejs.org/examples/misc_controls_pointerlock.html. Notez dans le code source du pointeur-verrouillage comment la caméra est ajoutée en tant qu'enfant/petit-fils de 2 objets pour obtenir l'effet souhaité. – WestLangley
@WestLangley, c'est sympa, merci, mais je n'ai pas besoin de bouger la caméra avec la souris. Et 'camera' utilise uniquement dans' controls = new THREE.PointerLockControls (camera); scene.add (controls.getObject()); '- son objet interne' PointerLockControls' ajoute à la scène, pas 'camera' elle-même et dans la fonction' onWindowResize' - juste en appliquant de nouvelles propriétés, et dans 'renderer.render (scène, caméra); '- utilise ici la variable' camera' originale. À propos de quoi 'child/petitchild' Vous parlez? Je ne peux vraiment pas comprendre, pouvez-vous expliquer? Merci d'avance. – ostapische
Remarquez comment 'PointerLockControls' fait tourner la caméra comme vous le souhaitez, sauf qu'elle utilise la souris au lieu du clavier. Pour obtenir cet effet, il utilise la technique 'pitchObject' et' yawObject'. Voir le code source. C'est ce que je voulais dire par «enfant/petit-enfant». Vous n'avez pas besoin d'utiliser 'PointerLockControls'; vous pouvez mettre en œuvre une logique similaire. – WestLangley