[ PENDIENTE DE CORRECCIÓN ]
Recientemente terminé mi trabajo práctico para Informática Gráfica, una asignatura de 3º de Ingeniería Informática. Mi modelo en 3D de la Battlestar Galactica es uno de los pocos trabajos de los que me siento orgulloso. El enunciado pedía desarrollar en un plazo de un mes aproximadamente un modelo 3D conceptual muy simple y de temática libre. En teoría, cualquier cosa que demostrase que tenías unos conocimientos mínimos del funcionamiento de OpenGL era suficiente para pasar la asignatura, por poner un ejemplo, un alumno presentó un muñeco de nieve el año pasado (dos esferas).
Por entonces, lo único que yo sabía de OpenGL era que es una API para tratar gráficos. Así que a la hora de decidir el modelo yo me lancé a hacer "algo molón" bajo la premisa de "será pillarle el truco". Si lo hubiese sabido, hubiese diseñado un destructor imperial o el Enterprise o el Sistema Solar o algo así y hubiese perdido mucho menos pelo del que he perdido este mes a causa del estrés. También es cierto que ahora no tendría ningún motivo para quererme un poco más.
Así que vamos al ajo: a lo largo de los siguientes post describiré el flujo de trabajo que he usado para hacer mi modelado y conservaré la ilusión de que esta pequeña visión generalista ayude a guiar por el sendero a futuros estudiantes.
Lo primero: una forma tosca de describir OpenGL
OpenGL, explicado para ñordos (como a mí me gusta que me expliquen las cosas), es una librería que nos permite programar (que no diseñar) gráficos en 2 y 3 dimensiones. Si con esta explicación no te llega puedes ir a Wikipedia . Según quien te cuente la historia y el sistema operativo que tenga instalado en su ordenador hay varias versiones de cómo lo crearon. Si la persona que te lo cuenta es amante de Ubuntu seguramente te contará que Silicon Graphics creó OpenGL para facilitar la creación y tratamiento de gráficos en computación, que cuando habían terminado decidieron hacerlo libre para todo el mundo, llegó un señor con gafas y mucho dinero lo copió tal cual y lo hizo propietario con el nombre de DirectX. Después extendió su monopolio y obligó a todos los frabricantes a seguir su especificación, así que OpenGL quedó un poco renegado y posteriormente a causa de la quiebra de Silicon Graphics obsoleto.
Si la misma historia te la cuenta un tío con el último Windows instalado en su ordenador los hechos son los siguientes: los de Silicon Graphics tuvieron la idea genial de crear una especificación que permitiese mejorar los gráficos en la computación, pero no dejaban de ser una pandilla de mataos con buenas ideas y poca experiencia que no iban a ningún lado con su producto a medio construír. Así que llegó el gran genio con gafas, cogió las ideas buenas, las evolucionó, las privatizó y convirtió el patético OpenGL en una fuente de dinero llamada DirectX que ante su increíble potencial adoptaron todos los fabricantes del mercado.
Puedes quedarte con la versión que más te guste, al fin y al cabo solo lo contaba como curiosidad. El caso es que OpenGL es una librería que teóricamente* está implementada en hardware. Esto quiere decir que cuando ejecutamos una instrucción OpenGL ésta no se ejecuta en la CPU del ordenador sino que se va directamente a una parte de tu ordenador llamada tarjeta gráfica. Si la tarjeta gráfica es compatible con OpenGL la instrucción estará implementada en hardware, es decir, existe una lógica dedicada a esa instrucción, es decir, hay unos chips y unos cables que equivalen a esa instrucción.
Cuando ahí arriba remarcaba el "teóricamente" lo hacía porque durante una época las tarjetas gráficas casi siempre implementaban la lógica de DirectX en vez de la de OpenGl; a día de hoy es común que implementen ambas.
De aquí debemos sacar una de las primeras ideas que debemos clavar en nuestro cerebro con clavos de acero: la lógica está ahí, en la tarjeta gráfica, no importa cuando ni donde llamemos a una instrucción, ésta se ejecuta. No hay un proceso secuencial de funcionamiento en OpenGL ni un orden lógico (sí que hay, evidentemente, una organización lógica). Con esto quiero decir que si estás definiendo el tamaño de la ventana y de repente activas el color verde será perfectamente correcto. Dentro de 200 líneas, cuando pintes un cuadrado, éste será verde. Esto es un poco difícil de explicar sin tecnicismos, pero tampoco creo que hayas llegado hasta aquí si no sabes tecnicismos así que ahí va: OpenGL funciona como una máquina de estados. Cuando programamos en C o C++ ( o lo que sea) y ejecutamos una instrucción OpenGL debemos ser conscientes que estamos cambiando un estado en la lógica de la tarjeta gráfica y que no hay una instrucción siguiente ni una anterior, simplemente un autómata que reacciona a cambios.
Y hasta aquí la introducción a OpenGL. En el próximo episodio contaré cómo programar sobre OSX.