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… »

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… »

August 13th, 2006

Este tutorial hace un breve repaso de tres conceptos importantes en la realización de aplicaciones con OpenGL, las convenciones del API, los tipos de datos manejados por este y los estados, con los cuales se controla gran parte del proceso de render.

TIPOS DE DATOS

Al igual que c, c++ y todos los lenguajes de programación definen unos tipos de datos básicos para representar valores de verdad, enteros, flotantes, bits y caracteres, OpenGL define sus propios tipos de datos que permiten trabajar de manera mas uniforme sobre el API en diferentes compiladores y sistemas operativos. Los tipos de datos en OpenGL son los siguientes:

Continuar Leyendo… »