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? P>
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) P>
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. P>
est-ce le chemin courant et / ou bon ou existe-t-il une voie plus facile / meilleure? p>
4 Réponses :
Oui, c'est essentiellement comme je l'ai toujours vu fait. P>
OK merci. Je voulais juste m'assurer que rien ne manque rien. Bonne journée!
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. P>
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. P>
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 . P>
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 :)
La façon dont i em> 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. P>
Vous pouvez calculer facilement le vecteur Vous pouvez utiliser un vecteur de code code> fixe code> (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.) P>
Le vecteur code> droit code> 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. P>
Touches de strate gauche / droite Utilisez ensuite le Quant à la partie GL, vous pouvez simplement utiliser oh et s'il vous plaît, veuillez ajouter une option "Inverser la souris". P>
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 code> droit code> d'abord (sans informations de hauteur), puis transfert code> avec une transformation de coordonnées sphériques à rectangulaire. (pitch = latitude = φ, yaw = longitude = θ) p>
+/- droite code> Vecteur. Pour un
Vecteur code> parallèlement au plan de masse, vous pouvez prendre le produit croisé du
droit code> et le codage code> vecteurs. P>
Glulookat () Code> à l'aide de l'origine du lecteur, de l'origine plus le vecteur code> vecteur code> et le
code > Vecteur. p>
Transférer code> et
up code>. p>