Sonido, interacción y redes I Bis

De esta entrada, había quedado pendiente una segunda parte. Bueno, pues he terminado releyendo el libro y mandando a la mierda el asco de resumen que me estaba saliendo, asi que repito de nuevo la primera parte y pongo el resto en sucesivas entradas, esperando que esta vez el resumen esté bastante decente.


Algunas partes, como la historia, lo he quitado. Y como no deja de ser un resumen, si os parece un contenido interesante, dadle un vistazo al libro. y aviso, tanto en esta entrada como en las otras, puede ser un tochazo aburrido. ;)

Usuario a Videojuego

Sistemas de entradas de datos: son elementos hardware que transofmran información proveniente del mundo real para que pueda ser procesado por un dispositivo electrónico. En los vieojuegos, estos sistemas permiten que el usuario comunique sus órdenes e intenciones al procesador del juego para poder interaccionar con los elementos que definen nuestro juego.

Criterios de clasificación de entradas
  • Información discreta o continua
  • Información relativa o absoluta
  • Número de grados de libertad (normalmente de uno a tres dimensiones)
  • Formato de entrada de información (ondas, verdadero/falso, coordenadas...)
Elementos básicos:
  • Pulsadores: Dan información sobre el estado de un elemento devolviendo true/false para saber si el botón está pulsado o no. Ademas de teclas y botones, guitarras y alfombras de baile también están basados en pulsadores. Sistemas de coordenadas: Informa de una posición, normalemnte en 2D, en forma de coordenadas y tenemos cosas como el ratón o una pantalla táctil.
  • Sticks: Proporcionan el movimiento y/o inclinación de un eje. No da una posición, si no el grado entre el eje del stick y la base del dispositivo. Por ejemplo el joystick.
  • Otros sensores: como por ejemplo el acelerómetro.
  • Nuevos usos de dispositivos existentes: micrófonos, cámaras... El problema es que estas entradas requieren más procesamiento.
Lo normal suele ser combinaciones de estos elementos en un solo dispositivo. El programador debe interpretar las señales después de leerlas.

Lectura de datos
Para permitir la compatibilidad entre juegos, consolas y dispositivos, se utiliza una estructura en capas para abstraer lo que está debajo de ellas. Ejemplo, cada ratón tiene su propio driver específico, con la cual el sistema operativo puede manejarlo. El sistema operativo ofrece una API y la aplicación usa esa API sin tener que conocer detalles del ratón y ni siquiera del sistema operativo.

Dos formas básicas de leer:
  • Por interrupción: el dispositivo detecta un cambio y se lo envia a la unidad central
  • Por encuesta: la unidad central va preguntando acca de su estado
Ventajas y desventajas entre PC y consola
En el PC tenemos mucha variedad de periféricos, los cuales la consola tiene limitado. El problema es que hay que preocuparse de las alternativas cuando al controlador le falta algún botón, cosa que en la consola no porque todos los mandos son iguales.

Librerías
  • DirectInput: componente de DirectX, soporta muchos dispositivos, integrado en Windows y con funciones adicionales como la gestión del Force Feedback. Pero muy poca portabilidad (Windows y Xbox)
  • SDL_Event: de las librerías SDL (Simple DirectMedia Layer). Es multiplataforma pero con menos métodos.
  • Object Oriented Input System (OIS): librería incorprada a Ogre. Es multiplataforma y modular, pero es un proyecto todavía pequeño, con poco soporte.
Algunas compañías en sus consolas sólo permiten el acceso a los dispositivos mediante sus propias librerías, algunas pública sy otras en su kit de desarrollo. También se podría usar las homebrew (obtenidas por ingeniería inversa)

Captura de entrada
Dos formas para tratar el estado:
  • Pasiva/Buffered (por encuesta): La API mantiene un buffer con el estado de los elementos, nosotros accedemos y miramos la información. La ventaja es que no nos tenemos que preocupar por el usuario si no queremos leer, pero sufrimos de cierto retraso entre acción y lectura.
  • Activa/Unbuffered (por interrupción): un cambio en el estado genera un evento en la API y es mandado a la aplicación, con lo que el tiempo de respuesta es máximo. Pero como no hay buffer, no es posible conocer el estado en todo momento, por ejemplo saber si están pulsadas dos teclas al mismo tiempo. Una solución es implementar nosotros mismos un buffer.
Interpretación de la entrada
Transformar la entrada de datos en acciones reales dentro del juego. Es importante recordar que una misma acción se puede realizar de distintas formas y tenemos que asegurarnos de que las condiciones se cumplen.

Cheat codes
Uno de los casos más curiosos de secuencias de comandos se encuentra en los conocidos cheat codes, que nos permiten desbloquear trucos y opciones especiales mediante la pulsación de largas secuencias de elementos. Los cheat codes son parte de las herramientas que los programadores utilizan a lo largo del desarrollo del juego para poder acceder más fácilmente a determinadas zonas y poder experimentar el efecto de modificaciones puntuales.

Recordar también que algunos dispositivos pueden cambiar de un país a otro, como puede ser el teclado.

En el caso de joystick analógicos hay que calibrar bien para que funcione bien, por ejemplo (imagen)

Pero en algunos casos, como en los coches, eso es poco preciso y siempre estaría girando. Podemos ajustar los valores a una función como (imagen)

Selección de objetos
En la interpretación, quizás lo más complejo es la selección de objetos, ya que tenemos que identificar el objeto que ve. En 2D suele ser menos difícil. El problema es que en una zona hay muchos elementos y no todos seleccionables, como el fondo. Para decidir qué elementos se incluyen, se usan máscaras de selección.
  • Se asigna a los objetos una máscara.
  • Cuando el usuario selecciona, se obtienen todos los objetos y se devuelve en un buffer.
  • Se aplican filtros para decidir qué objetos deben ser seleccionados antes de entregar la lista.
En 3D se complica, ya que no hay un procedimiento directo Se puede hacer con OpenGL mediante Ray Casting.

El Ray Casting consiste en un rayo proyectado desde el objetivo de la cámara y que atraviesa el punto donde se ha seleccionado. mediante una función de intersección entre línea y objeto, podemos determinar los objetos que cruza y guardarlo en un buffer y filtramos el buffer.

Para hacer una selección de una región, no se calcula la intersección de una línea, si no la intersección con una pirámide y se tiene en cuenta todos los objetos interiores.

Los motores gráficos ya se ocupan de estas cosas.

Nuevos sistemas de interacción
  • Basados en sonido
  • Basados en vídeo (cámaras)
  • Basados en el tacto (táctiles)
  • Basados en sensores (acelerómetro, giroscopio, magnetómetro, infrarrojos(permiten detectar puntos de luz en el espacio y determinar la posición del controlador con respecto a ellos))

Etiquetas: ,,,. Guarda el enlace permanente.

Deja un comentario ^^