Actualmente estoy creando un juego de disparos en 3D en primera persona en el navegador usando WebGL. ¿Cómo implementaría mouselook / free look para tal juego?
10
Actualmente estoy creando un juego de disparos en 3D en primera persona en el navegador usando WebGL. ¿Cómo implementaría mouselook / free look para tal juego?
Respuestas:
Mouselook ahora es compatible con Chrome y Firefox a través de la especificación W3C Pointer Lock . Esencialmente:
Un buen artículo de tutorial es Pointer Lock y First Person Shooter Controls en HTML5Rocks.
fuente
Capture
mousemove
eventos y use las propiedadesscreenX
yscreenY
del objeto de evento para actualizar la posición de la cámara (use el delta hasta el últimoscreenX
y lascreenY
posición para obtener la cantidad de movimiento).Si tiene algún tipo de escena , podría construir una configuración de nodo como la siguiente:
El movimiento en el eje X gira el YawNode y el movimiento en el eje Y gira el PitchNode. El CameraNode se moverá cuando el jugador se mueva.
fuente
Es bastante simple, y solo toma dos cosas.
Código de evento de muestra
Aquí hay un código fuente de muestra para hacer el manejo del evento. El módulo del sistema (que maneja toda la interacción del navegador del juego <-->) realiza un seguimiento de dos variables:
lastMousePosition
ylastMouseDelta
.Para rastrear la cámara con el mouse, solo necesita
lastMouseDelta
saber cómo sabrá cuántos grados rotar cuadro por cuadro.Mismo código de movimiento de cámara
Aquí hay un código de muestra para manejar la rotación de la cámara. Dada la cantidad de píxeles que el mouse se ha movido en la dirección X o Y, gire la cámara tantos grados.
Más tarde, cuando realmente renderice su mundo, simplemente genere una matriz de vista de modelo desde su cámara. (Convirtiendo la posición, guiñada, inclinación y balanceo de la cámara en vectores que puede pasar a gluLookAt.) Y debería estar listo para comenzar.
fuente