Archive for the 'Tutoriales' Category

Librerías de ayuda a la generación del glue code

Este artículo completa el que publiqué la semana pasada y que puede acceder haciendo click aquí.

Librerías de ayuda a la generación del glue code

Por lo general lo más dificultoso, en la integración de un motor de scripts a un motor de juegos, pasa por la exportación del modelo de objetos para que el mismo sea visible desde el script. Este código, denominado “glue code”, generalmente está relacionado a la exportación de funciones y mapeo de tipos de datos.

De esta manera, si poseo un personaje y quiero que el mismo se traslade de un posición A a una posición B deberé poder dar estas instrucciones desde Python (o el lenguaje de script que corresponda) para que esto suceda, además desde el script deberé poder consultar o recibir información acerca de la interacción de un determinado objeto o personaje con el mundo (ej: colisiones).

Existen diversas soluciones para generar este código de manera “automática” o, mejor dicho, de una manera menos manual. Veamos algunas de ellas:

(Read the article)

Introducción a la integración de scripts en un motor de juegos

Un lenguaje de “script”, es un lenguaje de programación interpretado por la computadora, es decir, que no requiere compilación.

Actualmente, incluir algún lenguaje de este tipo, en juegos, es muy común por la motivación de otorgar a diseñadores de niveles la posibilidad de agregar comportamientos a objetos o personajes sin necesidad de pasar por un proceso de “compilación” y sin afectar la estabilidad del juego. Además, los lenguajes de scripts suelen ser lenguajes de muy alto nivel, muy productivos en cuanto a generación de código se refiere y con estructuras de datos muy flexibles y fáciles de utilizar.

Por supuesto que realizar una tarea X utilizando un script tomará más tiempo que si hubiese sido codificada en lenguaje C, además es posible que los autores de dichos scripts – no siendo programadores expertos – tampoco realicen las tareas del modo mas eficiente posible.Sin embargo, los scripts suelen ejecutarse en threads de baja prioridad separados del bucle principal, por lo tanto un mal desempeño de los mismos no debería afectar de manera notoria la performance del juego todo. Además, tampoco realizaremos con scripts tareas propias del motor (o al menos no críticas).

Este tutorial expone las características fundamentales de tres exponentes de los lenguajes de scripts utilizados en juegos: Python, Lua y AngelScript. De cada uno de estos lenguajes se detalla como embeberlo en una librería C++ y como realizar la intercomunicación básica con el lenguaje.

(Read the article)

Torque Game Builder


A menudo se plantea la discusión en foros y listas acerca de si es mejor crear un motor propio o desarrollar sobre uno ajeno, sea de uso libre o no. La idea aquí no es volver a plantear este tema (que también se trató brevemente en este post), sino comentar las características de una de las alternativas que los desarrolladores – principalmente los independientes – tenemos como opción.

TGB box

El Torque Game Builder (TGB) es uno de los productos que ofrece GarageGames como alternativa para desarrolladores independientes que desean crear juegos 2D. Si lo que deseamos hacer es un juego 3D, entonces deberemos optar por otras alternativas que GarageGames nos ofrece, como el Torque Game Engine. También tenemos una versión de Torque Game Builder para crear juegos para XNA, llamado Torque X Engine.
(Read the article)

La librería SDL

SDL es lo más parecido que existe a un DirectX multiplataforma que podremos encontrar. En realidad la librería no persigue este objetivo sino que simplemente desea abstraer a las aplicaciones del uso de ciertos recursos independizándonos de la plataforma en la cual estemos trabajando. En este tutorial veremos como hacer uso de ella desde el lenguaje C++.

Si deseamos construir aplicaciones de alto desempeño en diversas plataformas el lenguaje C++ se suele postular como la opción ideal. Claro que la característica “multiplataforma” en estos tiempos hay que explicarla un poco, lenguajes como Java han redefinido este término porque realmente se puede ejecutar un programa escrito en él sin realizar cambios en diversas arquitecturas. C++ en cambio requiere ser recompilado. Pero ¿qué ocurre si deseamos crear un programa que posea ventanas o en el cual se manipulen gráficos, sonidos o dispositivos de entrada?, la definición del lenguaje C++ no llega tan lejos, no define ningún modo estándar de acceder a dispositivos de entrada como joysticks, por ejemplo, para esto deberíamos hacer uso de las librerías que se encuentren en la plataforma de interés, como DirectInput. El problema es que si tomamos esta decisión nuestro programa “multiplataforma” dejará de serlo, ya que en Linux no se encuentra disponible el API de Microsoft.

(Read the article)

Modelos MD2 (Quake 2) [parte 1]

El formato MD2 fue creado por Id Software para su juego Quake 2 y es utilizado principalmente en los modelos de los jugadores y de los personajes no jugador. El formato se destaca por su simpleza, cantidad de modelos hechos por terceras partes y cantidad de herramientas para la creación de modelos que existen en la red.

md2-q2scn

En este primer tutorial veremos cual es el formato de los archivos MD2. Más adelante veremos como realizar la carga, visualización y animación en lenguajes C# y C++ utilizando DirectX.

(Read the article)

Implementando la clase “Cámara”

En este tutorial aprederemos como crear una clase que encapsule el manejo de una cámara en un mundo 3D. Está codificado en C++ utilizando DirectX 8 pero fácilmente podría ser convertido a otros lenguajes utilizando otras librerías como OpenGL.

El punto desde el cual observamos una escena está determinado por la matriz de vista, mientras que el modo en que la vemos y cuanto vemos de ella está determinado por la matriz de proyección. Es conveniente poseer en nuestro juego una clase que encapsule los componentes necesarios para crear una matriz de vista adecuada a nuestros fines en cada caso (aunque también dependiendo de la flexibilidad que deseemos lograr podría ser necesario tener componentes para crear una matriz de proyección).
Nuestra clase que llamaremos “Camera” podrá moverse por el entorno y rotar por medio de los tres ejes posibles (X, Y, Z).

De este modo su manipulación será muy sencilla y podremos utilizarla para navegar por el terreno o mapa de nuestros juegos libremente o para que represente un jugador o vehículo del mismo (al estilo de un FPS).

(Read the article)

Skyboxes

Casi todo fps que permita caminar en exteriores o que desde algún punto del mapa permita visualizar los exteriores utilizan skyboxes.

Un skybox es simplemente un cubo que posee en sus caras interiores imágenes de paisajes o panoramas. Si la caja es lo suficientemente grande y se encuentra creada correctamente, el jugador, situado en algún punto de su interior, tendrá la sensación de estar rodeado por el paisaje impreso.

Hoy día – además de cubos – se utilizan otro tipo de formas como esferas, semi esferas y dromos; en particular cuando el cielo posee nubes que se mueven o existe un ciclo progresivo día / noche. Sin embargo, la implementación clásica sigue viniendo de la mano de los cubos, es algo sencillo y bien implementado genera el efecto buscado a la perfección. Veamos cuales son los secretos de este gran clásico.

En otros tutoriales veremos como realizar la implementación de skyboxes con cubic enviroment mapping y haciendo uso de otras formas.

skybox-1

Figura 1. El jugador se encuentra inserto dentro de nuestro cubo

(Read the article)

Flocking

Flocking es el nombre que se le da al modelo computacional utilizado para el movimiento coordinado de grupos (flocks) de entidades (boids). Este movimiento coordinado puede apreciarse en la naturaleza, en el vuelo de los pájaros, peces, insectos, etc.

Fue introducido por primera vez por Craig Reynolds por medio de su paper “Flocks, Herd, and Schools: A Distributed Behavioral Model” en la SIGGRAPH del año 1987.

El modelo posee ciertas reglas que hay que respetar en la implementación, es decir, flocking no es sólo intentar simular el movimiento de entidades coordinadas sino además la aplicación de ciertas reglas que aseguren las condiciones reales de este fenómeno. No puede existir una inteligencia superior que gobierne todas las entidades, cada entidad se mueve de modo independiente según las reglas del modelo y su ponderación respectiva.

(Read the article)

Frustum Culling

Sabemos que es muy conveniente evitar procesar vértices que finalmente serán recortados en la última etapa del pipeline. Para esto existen muchas técnicas y en ciertas ocasiones estas técnicas se combinan. En este documento veremos una de ellas llamada “frustum culling” que puede ser combinada, por ejemplo, con árboles bsp, quadtrees, octrees o incluso ser utilizada de modo independiente.

El frustum es básicamente el volumen de visualización generado a partir de una matriz de proyección en perspectiva; la forma de este volumen es el de una pirámide con la punta recortada. El frustum se encuentra delimitado por 6 planos: Plano de recorte lejano, plano de recorte cercano, plano superior, plano inferior, plano izquierda y plano derecho.

frustum fig1

Figura 1. El frustum visto de arriba

(Read the article)

Implementación de un sistema de partículas

Los sistemas de partículas son utilizados en los juegos para crear una gran cantidad de efectos. Su implementación es mucho más sencilla de lo que parece, veamos como hacerlo utilizando C# y Managed DirectX.

Un sistema de partículas es una colección de pequeños objetos, denominados partículas, que se comportan de un modo predefinido para simular distintos efectos gráficos como humo, nieve, fuego, chispas, explosiones, hojas volando al viento, vapor, etc. Cada partícula posee propiedades que definen su comportamiento en el mundo así como su aspecto. Usualmente una partícula se encuentra compuesta por un pequeño mapa de bits aunque también podría ser un polígono o un conjunto de ellos.

freedomforce 01

Figura 1. El juego Freedom Force hace un uso intensivo de los sistemas de partículas

La implementación de un sistema de partículas puede ser bastante sencillo, aunque esto dependerá en parte del tipo de simulación que deseemos efectuar. Algunos sistemas implementan colisiones entre las partículas, algo costoso en términos de CPU pues la cantidad de partículas de un sistema suele ser elevada.

(Read the article)

Next Page »