Archive for the 'C++' Category

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)

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)

Uso de la librería UnRarLib con C++

En ocasiones es muy útil poder colocar los variados elementos que utilizan nuestros juegos dentro de un solo archivo, y mejor aún, comprimido. Muchísimos juegos hacen uso de esta opción, como por ejemplo el Quake, Half-Life, Unreal, etc.

En este tutorial explicaremos como utilizar la librería UnRarLib para estos fines, creando una interfaz que será similar a la clase ifstream y manejará recursos comprimidos y no comprimidos de modo transparente al usuario.

(Read the article)