January 10th, 2008

Este tutorial agrega un elemento con el que se podría dar por terminado la especificación clásica de OpenGL, se trata de texturas, un tema que acompaña aun desde sus origines 2d a los gráficos por computadora. Para el caso de este tutorial se mostraran las diferentes propiedades y funcionalidades asociadas al manejo de texturas en OpenGL.

Existen cuatro tipos básicos de texturas en OpenGL GL_TEXTURE_1D, GL_TEXTURE _2D , GL_TEXTURE _3D y GL_TEXTURE_CUBE_MAP. Al igual que con iluminación, culling y otras propiedades, el texturizado puede ser activado y desactivado via glEnable() y glDisable(), utilizando cualquiera de los cuatro tipos de textura. Para los propósitos de este tutorial se tratará con las texturas bidimensionales, debido a que en principio es la más utilizada.

Se puede decir que para mostrar una textura en OpenGL hay que hacer cuatro cosas básicas:

  1. Cargar la textura desde algún lugar de almacenamiento, lo que implica leerla desde algún tipo de formato (png, bmp, jpg, gif, etc) y ponerla en memoria.
  2. Configurar las características de presentación de la textura, es decir, como OpenGL debe interpretarla y mostrarla.
  3. Generar un objeto-textura y con esto es necesario obtener un identificador para ésta.
  4. Asociar la textura a una o varias primitivas, especificando para cada caso la forma en que debe ser mapeada.

Debido a la gran variedad de formatos existentes y a la cantidad de posibilidades que tiene cada uno (compresión, profundidad de color, transparencia, paleta, etc), es dispendioso realizar un cargador funcional para videojuegos. Por suerte muchas personas ya han realizado el trabajo duro =) , por lo que basta a acudir a uno de los tantos proyectos Open Source para obtener cargadores de calidad libres de costos por licenciamiento.
Continuar Leyendo… »

June 10th, 2007

Irrlicht es un motor que aunque no ofrece las prestaciones superiores de Ogre, Torque o de otros motores comerciales, es de fácil uso y por tanto un buen punto de partida para empezar a trabajar. Aunque se oferte a si mismo como un motor gráfico, irrlicht posee unas pocas características de motor de videojuego, principalmente la de leer scripts (xml), lo que permite hacer scripting de niveles. Aún así para la mayoría de las características adicionales como AI, networking y sonido tienen que ser desarrollados con herramientas externas.

Debido a que este es un proyecto en continuo desarrollo es probable que algunas cosas dejen de funcionar correctamente a medida que el motor evoluciones, en cada caso colocaré una versión con la que fue realizado el tutorial.

Esta motor no posee una documentación estructurada mas allá de una revisión de clases, funciones y constantes, que es bastante buena, pero con la que cuesta hacerse una idea global del manejo del motor. También están los tutoriales en la página principal, mas otras cuantas páginas, muy pocas en español, lo que hace que estos tutoriales tengan cabida. En este tutorial las cosas van desde lo mas básico, así que se detallan cosas tan evidentes para algunos como incluir los path en el IDE.

Es probable que algunos tutoriales de esta serie parezcan directamente sacados de los que se ofrecen en la página de Irrlicht, pero en realidad son una mezcla entre éstos, la experiencia en el aprendizaje del motor, el conocimiento existente en los foros y la documentación que acompaña al sdk. Realmente estoy al comienzo del aprendizaje, así que esta serie de tutoriales estarán llenos de omisiones y errores, que con suerte iré corrigiendo poco a poco. No se olviden de comentar todas las bestialidades cometidas.

Continuar Leyendo… »

March 3rd, 2007

En algunos tutoriales anteriores de OpenGL se han mencionado de manera fragmentaria los conceptos de transformaciones:

  • En “Primeros Pasos en OpenGL” se mencionaba de manera general algunos conceptos relacionados con las transformaciones en OpenGL, específicamente la proyección. Es recomendable revisar y entender “Primeros Pasos en OpenGL” antes de aventurarse a leer el presente tutorial.
  • En los “Hola Mundo 3d en OpenGL” y “Hola Complicado Mundo OpenGL-win32” se utilizaron algunas transformaciones de proyección y viewport para ajustar la inicialización de la ventana, pero sin entrar mucho en detalle acerca de su funcionamiento.

Este tutorial explora los diferentes tipos de transformaciones en OpenGL, a saber:

  • Proyección: Trasforman una escena 3d “abstracta”, en una imagen plana que puede ser visualizada en una pantalla.
  • Viewport: Ajustan el producto de la proyección a las dimensiones de un rectángulo contenedor (ventana).
  • De vista: Que definen y afectan la posición desde la cual se visualizan las escenas tridimensionales.
  • Modelado: Sirven para manipular los objetos en la escena, permitiendo trasladarlos, rotarlos y deformarlos (escalarlos).
  • Modelo-Vista: Son la combinación de las dos transformaciones anteriores, que desde un punto de vista práctico son semejantes.

Pipeline parcial
Continuar Leyendo… »

December 22nd, 2006

Este tutorial muestra las bases necesarias para crear animaciones simples en OpenGL, incluyendo los conceptos de doble buffer, la coordinación de frames por tiempo y pasos. Al igual que en los anteriores tutoriales se dará un ejemplo aplicativo, aunque en este caso está hecho en Visual C++ Express.

La Animación.

Cualquier forma de animación, bien sea esta al estilo antiguo de Disney (frames hechos a mano), cine, animaciones gif, videos de computadora y videojuegos utiliza una técnica que consiste en mostrar rápidamente, a entre 30 y 60 cuadros por segundo (fps) un conjunto de imágenes que varían de forma ligera, para crear la sensación de movimiento aprovechando una característica de la visión humana llamada persistencia de la visión.

En el caso particular de los videojuegos, los frames se hacen mezclando un conjunto de figuras bidimensionales (sprites) o haciendo complejos cálculos sobre la manera en que se vería una proyección bidimensional de una escena “abstracta” tridimensional (3d), o una mezcla de ambas, y realizando en cada caso un cálculo del pequeño movimiento que debe hacer cada objeto para dar una sensación fluida de animación.

EL BUFFER DOBLE

Se ha mencionado ya que para poder dar la sensación de movimiento es necesario mostrar cerca de 30 cuadros por segundo. El problema es que el computador no genera “instantáneamente” la imagen a partir de los sprites o la escena 3d, por lo que si se posee una sola área de dibujo en la memoria se verán molestos intervalos entre un frame y otro (mientras se hacen los cálculos y se realizan movimientos de memoria). Es en este sentido que la estrategia de múltiples buffers, dos en este caso funciona.

Continuar Leyendo… »

September 11th, 2006

Este tutorial cubre el manejo de primitivas en OpenGL, fundamental a la hora de realizar cualquier tipo de aplicación 3d, ya que con estas (especialmente los triángulos) es que se representan los objetos 3d en los videojuegos. Al igual que en los anteriores tutoriales vale la pena aclarar que la documentación sobre la que se basa este tutorial es la de la implementación 1.1 de OpenGL, que aún sigue vigente en la implementación actual, pero con variaciones gracias a la introducción de nuevas tecnologías en las tarjetas gráficas.

Este tutorial, a diferencia de los anteriores, permite ver en acción las capacidades de OpenGL al mismo tiempo que su sencillez, posteriormente, con la introducción de las transformaciones, texturas, iluminación, extensiones y shaders se mostrara la potencia que la actual versión de OpenGL permite.

PRIMITIVAS

En el mundo físico los objetos poseen formas variadas que no necesariamente guardan relación con los objetos en la geometría básica. En los videojuegos y demás software 3d en tiempo real, representar esas formas de manera exacta sería muy costoso computacionalmente hablando (hardware), al punto de que sería casi imposible con la tecnología actual, es por eso que se usan aproximaciones para hacer que las cosas se vean lo mas cercanas posibles a la realidad y al mismo tiempo, lo mas ajustado posible a las capacidades del hardware actual. Al fin y al cabo hay un dicho en computación gráfica “si luce bien, esta bien”.

Ejemplo alambres
Un modelo hecho de triángulos a la izquierda, a la derecha con superficie e iluminación.

Continuar Leyendo… »