Ich erstelle gerade ein 3D-Ego-Shooter-Spiel im Browser mit WebGL. Wie würde ich Mouselook / Free Look für ein solches Spiel implementieren ?
10
Ich erstelle gerade ein 3D-Ego-Shooter-Spiel im Browser mit WebGL. Wie würde ich Mouselook / Free Look für ein solches Spiel implementieren ?
Antworten:
Mouselook wird jetzt in Chrome und Firefox über die W3C Pointer Lock- Spezifikation unterstützt. Im Wesentlichen:
Ein guter Tutorial-Artikel ist Pointer Lock und First Person Shooter Controls auf HTML5Rocks.
quelle
Erfassen Sie
mousemove
Ereignisse und verwenden Sie die EigenschaftenscreenX
undscreenY
des Ereignisobjekts, um die Kameraposition zu aktualisieren (verwenden Sie das Delta bis zum letztenscreenX
und diescreenY
Position, um den Bewegungsumfang zu ermitteln).Wenn Sie eine Art Szenegraph haben , können Sie ein Knoten-Setup wie das folgende erstellen:
Die Bewegung in der X-Achse dreht den YawNode und die Bewegung in der Y-Achse dreht den PitchNode. Der CameraNode wird verschoben, wenn sich der Player bewegt.
quelle
Es ist ganz einfach und erfordert nur zwei Dinge.
Beispiel für einen Ereigniscode
Hier ist ein Beispiel-Quellcode für die Ereignisbehandlung. Das Systemmodul (das alle <-> Browser-Interaktionen des Spiels abwickelt) verfolgt zwei Variablen:
lastMousePosition
undlastMouseDelta
.Um die Kamera mit der Maus zu verfolgen, müssen Sie nur
lastMouseDelta
wissen, um wie viel Grad Sie sich von Bild zu Bild drehen müssen.Gleicher Kamerabewegungscode
Hier ist ein Beispielcode für die Handhabung der Kameradrehung. Drehen Sie die Kamera angesichts der Anzahl der Pixel, die die Maus in X- oder Y-Richtung bewegt hat, um so viele Grad.
Wenn Sie später tatsächlich Ihre Welt rendern, generieren Sie einfach eine Modellansichtsmatrix aus Ihrer Kamera. (Konvertieren Sie die Position, das Gieren, die Neigung und das Rollen der Kamera in Vektoren, die Sie an gluLookAt übergeben können.) Und Sie sollten bereit sein, loszulegen.
quelle