La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Laboratorio de Investigación y Desarrollo de Software Libre Creación de un motor de videojuegos ultrabásico con C, SDL y OpenGL sobre plataformas de Software.

Presentaciones similares


Presentación del tema: "Laboratorio de Investigación y Desarrollo de Software Libre Creación de un motor de videojuegos ultrabásico con C, SDL y OpenGL sobre plataformas de Software."— Transcripción de la presentación:

1 Laboratorio de Investigación y Desarrollo de Software Libre Creación de un motor de videojuegos ultrabásico con C, SDL y OpenGL sobre plataformas de Software Libre (“FLOSS”, “Free/Libre Open Source Software”) Alejandro Valenzuela Roca http://lidsol.org http://mexinetica.com/~lanjoe9 lanjoe9@mexinetica.com

2 ¿Qué hay en esta plática? ● Objetivo ● ¿Qué es un motor de videojuegos? ● ¿Por qué C/SDL/OpenGL? ● Funcionamiento de un motor de videojuegos ● Construcción de un ejemplo: – SDL – OpenGL – Geometría analítica (Álgebra vectorial) – Simulación de cinemática – Detección de Colisiones – Sonido

3 Objetivo ● Que los asistentes sepan con qué se puede hacer y por dónde se puede comenzar, y tengan una idea de cómo funciona un motor de juegos por dentro, sin entrar en cosas demasiado complicadas (por ahora). ● Que los asistentes observen una demostración de un mini-juego 3d multiplataformas con un motor muy sencillo.

4 Introducción ● En un principio, cualquier ñoño lo suficientemente ñoño en la computadora hacía un videojuego. ● Hoy en día, se requieren ingenieros de Software para las herramientas y el motor, de Hardware para las consolas, de redes para los MMORPG, Animadores, Diseñadores de personajes, Cuentistas, Marketing, Finanzas, etc. ● Esta plática se enfoca en un motor 3d muy básico, pero hecho por nosotros mismos.

5 ¿Qué necesito? ● Máquina Una máquina con ~ 1 GHz, pentium3+, 256MB+ RAM, tarjeta de video aceleradora compatible (intel, nvidia o ATI – que tenga drivers para GNU/Linux) ● Paciencia ● Perseverancia ● Imaginación ● Un “NO extremo disgusto” por las matemáticas

6 ¿Por qué C/SDL/OpenGL? ● Software libre ● Excelente rendimiento ● Multiplataforma (GNU/Linux, *BSD, Windows, MacOS, BeOS, Solaris, IRIX, QNX, WindowsCE, Playstation*, Dreamcast*, Atari*, Symbian*) ● Programaremos las “tripas” del sistema ● Interoperabilidad entre distintos entornos, SO, compiladores, incluso lenguajes ● No es demasiado complicado * Con soporte aunque no oficialmente soportado (fuente: http://www.libsdl.org/ )http://www.libsdl.org/

7 ¿Qué es un motor de videojuegos? ● Programa que simula mediante matemáticas el estado de un mundo ficticio que reacciona al estímulo de uno o más usuarios. ● Esquema if (A > B) return colision; Pos += 1;

8 Funcionamiento de un motor de videojuegos ● Esquema interno Inicio Menú Mainloop Inicializar variables ¿Sa lir? No Fin Sí Lo que cubre esta plática Game Over

9 Inicialización de variables ● Posición inicial de los objetos dentro del juego ● Situación inicial del juego – Vidas = 3 – Mundo = 5-3 – Tiempo restante = 400s – Velocidad = 0 – Aceleración = 0 – Energía = 100 – etc.

10 Mainloop Inicio Leer controles del usuario y alterar variables “de control” en base a dichos controles Actualizar variables “de juego” en base al estado previo y al tiempo transcurrido; como el Mainloop es precisamente un ciclo, este tiempo transcurrido será el tiempo entre la última vez que se corrió este mismo bloque y “ahora”. Representar al universo de manera gráfica (pintar un frame con la información pertinente que le muestre al jugador lo que está pasando) ¿Salir ? No Fin Sí If (control.circle.pressed){ acelerar = 1; } V = V + a * pos = pos + V * Calcular (entre otras cosas) Dormir ZzZzZz...

11 Leer controles del usuario y alterar variables “de control” ● Se detecta qué botones o teclas está presionando el usuario. ● Se alteran variables (por ejemplo, si el usuario presiona el botón de salto, se establece dicha variable en 1). ● Es mejor no tomar directamente la lectura de los controles porque dependiendo de la plataforma pueden llegar varios mensajes idénticos seguidos, luego desaparecer sin que el botón haya sido soltado, luego reaparecer, etc.

12 Observación ● Algunas consolas modernas leen los controles más frecuentemente de los fps que dibujan, probablemente para realizar una medición más precisa en controles extraños (como el ilustrado). Sin embargo, en el motor de esta plática esta idea fue probada sin resultados significativos (salvo que la aplicación se colgaba en Windows..)

13 Actualización de las variables “de juego” ● La actualización de las variables de juego es una de las partes más interesantes y una donde se realiza una gran cantidad de cálculos; en general: – Se actualizan las aceleraciones de los objetos móviles en base a las variables “de control”. – Se actualizan las velocidades de los objetos en base a sus aceleraciones. – Se actualiza la posición de cada objetos en base a su velocidad resultante.

14 Actualización de las variables “de juego” (continuación) – Se detectan colisiones que pueden modificar directamente la posición, las velocidades, y las aceleraciones del objeto. – Se corrigen “efectos cuánticos”, efectos secundarios de discretizar el tiempo para detectar colisiones.

15 Actualización de las variables “de juego” (continuación) – Los “agentes” dentro del juego (enemigos, etc.), deben tomar decisiones en base a lo que estaban haciendo con anterioridad, y la nueva situación del universo dentro del motor de juego. – Se decide si se emiten sonidos o no (el sonido debe tener su propio hilo, de preferencia).

16 Representar la situación actual del universo de manera gráfica ● Una vez terminados los cálculos que definen completamente la situación actual, se manda al sistema de trazado de gráficos (en este caso OpenGL) las instrucciones necesarias para representarlo. – En esta etapa se calcularían todos los efectos de luz, las oclusiones, etc., en un motor gráfico más complejo.

17 Construcción de un ejemplo ● Usaremos C, SDL y OpenGL para construir un motor gráfico sencillo en base a lo que se vio con anterioridad. ● Necesitaremos: – Caja de vectores. – Compilador. – Bibliotecas instaladas.

18 SDL ● SDL es una biblioteca que abstrae el sistema de ventanas, de manera que con las mismas funciones de SDL tendremos efectos equivalentes sin importar si se trata de GNOME o KDE, XFCE, el manejador de BeOS o Windows. Las ventanas se crearán de la misma manera sin importar la plataforma. ● SDL también nos abstrae el sistema de sonido y provee de métodos para leer tanto efectos de sonido en wav como música en OGG.

19 OpenGL ● OpenGL es una biblioteca desarrollada por SGI para conservar una API uniforme para trazar gráficos en varias plataformas. ● OpenGL es capaz de comunicarse directamente con la tarjeta de video de manera que en gran parte traslada los cálculos de los gráficos del procesador a la tarjeta de video.


Descargar ppt "Laboratorio de Investigación y Desarrollo de Software Libre Creación de un motor de videojuegos ultrabásico con C, SDL y OpenGL sobre plataformas de Software."

Presentaciones similares


Anuncios Google