12
votes

Comment implémenter une caméra FPS?

Alors je travaille actuellement sur une programmation de jeu FPS à OpenGL (JOGL, plus précisément) Juste pour le plaisir et je voulais savoir quelle serait la façon recommandée de créer une caméra de type FPS?

Pour le moment, j'ai essentiellement un vecteur pour la direction du lecteur qui sera confronté, qui sera ajouté à la position du joueur actuelle lors de la touche "W" ou de la touche Forward. Le négatif de ce vecteur est bien sûr utilisé pour la clé "S" ou en arrière. Pour "A", gauche, et "D", à droite, j'utilise la normale du vecteur de direction. (Je suis conscient que cela laisserait le joueur voler, mais ce n'est pas un problème pour le moment)

Lors du déplacement de la souris, le vecteur de direction sera pivoté à l'aide de la trigonométrie et des matrices. Tous les vecteurs sont bien sûr normalisés pour un contrôle de vitesse facile.

est-ce le chemin courant et / ou bon ou existe-t-il une voie plus facile / meilleure?


0 commentaires

4 Réponses :


4
votes

Oui, c'est essentiellement comme je l'ai toujours vu fait.


1 commentaires

OK merci. Je voulais juste m'assurer que rien ne manque rien. Bonne journée!



1
votes

Ouais, mais à la fin, vous voudrez ajouter divers autres attributs à la caméra. Pour l'épeler N00B: gardez-le bien rangé si vous voulez imiter le tremblement de terre ou le CS. À la fin, il pourrait avoir de bobing, FOV, filtrage de mouvement, suspension de la gamme réseau et plus.

Les caméras sont en fait l'une des parties les plus difficiles à faire dans un bon jeu. C'est pourquoi les développeurs sont généralement satisfaits d'un dito gravement terne, fixe 1ème / 3ème personne.


0 commentaires

1
votes

Vous pouvez utiliser Quaternions pour la rotation de votre appareil photo. Bien que je ne l'ai pas essayé moi-même, ils sont utiles pour éviter verrouillage de gimbal .


2 commentaires

Le verrou de Gimbal ne peut pas arriver en FPSS; En fait, coupler des angles d'Euler aux mouvements de la souris est une simplification massive sans aucun risque.


Jonas a raison, il n'ya qu'un risque de verrouillage du cardan lorsque vous combinez au moins 3 rotations. L'article que vous citez est tout simplement faux. Vous pouvez avoir une serrure de gimbal avec des matrices et des quaternions si et seulement si vous utilisez des transformations d'Eulérian. Il n'y a que deux façons de résoudre ce problème, certains traitements non linéaires pour les singularités sur des poteaux ou des transformations non eulériennes plus faciles à exprimer avec ... Quaternions :)



7
votes

La façon dont i avez toujours été vu faire est d'utiliser deux angles, lacet et la hauteur. Les deux axes du mouvement de la souris correspondent aux changements de ces angles.

Vous pouvez calculer facilement le vecteur transfert avec une transformation de coordonnées sphériques à rectangulaire. (pitch = latitude = φ, yaw = longitude = θ)

Vous pouvez utiliser un vecteur de code fixe (dire (0,0,1)) mais cela signifie que vous ne pouvez pas regarder directement vers le haut ou vers le bas. (La plupart des jeux résolvent cela en vous permettant de ne regarder pas de plus de 89,999 degrés.)

Le vecteur droit est alors le produit croisé des vecteurs en avant et en haut. Il sera toujours parallèle au plan de sol puisque le vecteur up est toujours perpendiculaire au plan du sol.

Touches de strate gauche / droite Utilisez ensuite le +/- droite Vecteur. Pour un Vecteur parallèlement au plan de masse, vous pouvez prendre le produit croisé du droit et le codage vecteurs.

Quant à la partie GL, vous pouvez simplement utiliser Glulookat () à l'aide de l'origine du lecteur, de l'origine plus le vecteur vecteur et le Vecteur.

oh et s'il vous plaît, veuillez ajouter une option "Inverser la souris".

Edit: ici est une solution alternative qui se débarrasse du problème 89.9, posée dans une autre question, qui implique de construire le vecteur droit d'abord (sans informations de hauteur), puis Transférer et up .


0 commentaires