Je suis en train de créer un jeu de tir 3D à la première personne dans le navigateur à l'aide de WebGL. Comment implémenter mouselook / free look pour un tel jeu?
10
Je suis en train de créer un jeu de tir 3D à la première personne dans le navigateur à l'aide de WebGL. Comment implémenter mouselook / free look pour un tel jeu?
Réponses:
Mouselook est désormais pris en charge dans Chrome et Firefox via la spécification W3C Pointer Lock . Essentiellement:
Un bon article de didacticiel est Pointer Lock et First Person Shooter Controls on HTML5Rocks.
la source
Capturez des
mousemove
événements et utilisez les propriétésscreenX
etscreenY
de l'objet événement pour mettre à jour la position de la caméra (utilisez le delta jusqu'au dernierscreenX
et lascreenY
position pour obtenir la quantité de mouvement).Si vous avez une sorte de scénario , vous pouvez créer une configuration de nœud comme celle-ci:
Le mouvement dans l'axe X fait tourner le YawNode et le mouvement dans l'axe Y fait pivoter le PitchNode. Le CameraNode sera déplacé lorsque le joueur se déplace.
la source
C'est assez simple et ne prend que deux choses.
Exemple de code d'événement
Voici quelques exemples de code source pour la gestion des événements. Le module système (qui gère toutes les interactions du navigateur <--> du jeu) garde une trace de deux variables:
lastMousePosition
etlastMouseDelta
.Pour suivre la caméra avec la souris, il vous suffit de
lastMouseDelta
savoir comment vous saurez combien de degrés pour faire pivoter image par image.Même code de mouvement de caméra
Voici un exemple de code pour gérer la rotation de la caméra. Compte tenu du nombre de pixels que la souris a déplacés dans la direction X ou Y, faites pivoter la caméra de ce nombre de degrés.
Plus tard, lorsque vous allez réellement rendre votre monde, générez simplement une matrice de vue modèle à partir de votre caméra. (En convertissant la position, le lacet, le tangage et le roulis de la caméra en vecteurs, vous pouvez passer à gluLookAt.) Et vous devriez être prêt à partir.
la source