Open GL a saco.

0

Category:

[ 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. 

ESEI, feedback.

1

Category:

Hoy he sentido un poco de vértigo a eso de las 10.30 de la mañana, exactamente en el momento en el que me di cuenta de que podía estar en mi última clase en esta universidad. A lo largo de la semana irán extinguiéndose las clases presenciales hasta dar por concluido el 2º cuatrimesre en la Universidade de Vigo y con ello voy dejando atrás un año que ha traído un montón de buenos momentos para mí. Este ha sido el último año en el que la Universidad imparte el 2º curso de Ingeniería Técnica y con ello también va camino de extinguirse una carrera de la que a mí, a día de hoy, todavía me faltan 10 asignaturas por superar. 



Nota: ¿Nunca os habéis preguntado por qué le llaman carrera? A medida que pasan los años ese significado va cobrando sentido. De hecho, para algunos, más que una carrera parece un maratón. 

Me mucha pena, sobre todo ahora que empiezo a ver la línea de meta, lo desordenada que está toda la carrera. Es un auténtico desastre. No sé si es enfermedad de la ESEI o si esto sucede en todas las facultades de informática, pero tras tres años aquí no tengo la impresión de haber cursado una carrera universitaria, sino dos docenas de cursillos en academias distintas con gerentes que nunca se sentaron a hablar sobre informática. 

Los tres años que estudié estuve matriculado en la USC en la Facultad de Física descubrí una carrera con un tronco central que básicamente eran todas las asignaturas de matemáticas y física general y a partir del cual se empezaban a ramificar conocimientos de una manera ordenada. Cuando dejé aquella facultad, en un ranking de El País la habían valorado (muy correctamente a mi parecer) como la segunda peor facultad para estudiar Física en España. Pero a lo que aquí me refiero es a que la carrera estaba estructurada como una carrera, las asignaturas se unían y, lógicamente, compartían conocimientos, pero en raras ocasiones se solapaban. 

Ingeniería Técnica en Informática de Gestión está compuesta por tres cursos. En primero te enseñan un poco de matemáticas (muy básicas, la verdad), te enseñan un poco de historia de la informática, te dan una breve introducción hacia la ingeniería electrónica, te enseñan los fundamentos de la algoritmia y las estructuras de datos y finalmente empiezan a intentar lavarte el cerebro para que programes de una forma limpia, eficiente y adecuada a lo que estés haciendo. En el segundo curso introducen unas cuantas asignaturas que si bien, los alumnos solemos odiar, te amueblan la cabeza de una forma increíble. Algunas como "Teoría de los lenguajes formales" que no tienen una aplicación directa y que son increíblemente difíciles de entender te abren la mente de forma que cuando te presentan tecnologías como Open GL (dígase DirectX) eres capaz de comprender sin grandes traumas. En Sistemas Operativos te enseñan la base teórica de todos los sistemas operativos, de modo que de repente puedes subir un peldaño más para mirar desde un poco más alto y darte cuenta de que Windows/Linux/OSX y el sistema operativo que lleva el GPS del coche no son tan distintos como parecen. 
Y al fin: tercero. Tercero es lo que yo he llamado "El Año Wikipedia". Un montón de asignaturas que si tuviese que buscarle el lado bueno lo único que se me ocurriría decir es que trasteas con un montón de tecnologías (que tampoco llegas a entender del todo, porque un cuatrimestre tiene solo cuatro meses). 

En tercero, algunos problemas que ya están latentes los otros dos años empiezan a convertirse en auténticas fuentes de aburrimiento y desmoralización. La informática avanza a un ritmo tan frenético que un profesor prepara una asignatura para impartirla el año que viene y dentro de dos años, sus alumnos repetidores están estudiando una tecnología casi obsoleta. Y el profesor va readaptando su asignatura como puede, y como lo que no puede es saber de todo termina dando una asignatura en la que un gran porcentaje de sus alumnos saben más que él.

Aún peor, los propios profesores han asumido el rol de guías espirituales. Ciñéndome, evidentemente, a una descripción totalmente generalista y subjetiva puedo relatar aquí cómo de mal humor me pone que un profesor diga en clase "bueno, de esto no os cuento nada, que al fin y al cabo vosotros sabéis más que yo". Así que se pasa el resto de la clase dando consejos, contando por donde cree que deberían ir los tiros y contándote historias. La que más le gusta es la de cómo se inventó internet. A lo largo de todo este tiempo he escuchado casi una docena de versiones de cómo se diseñó Arpanet y, la mejor versión de todas, sigue siendo la de Wikipedia. 

Tormenta de ideas: 
Durante estos tres años me han explicado como 5 o 6 veces lo que es un "bucle for" y para qué sirve y por qué no se debe cambiar el valor de la variable de control dentro de él. Sin embargo he trabajado con PHP en dos asignaturas y no me lo han explicado en ninguna. En el primer cuatrimestre de segundo dieron por sabido C++ y luego, cuando ya me lo había estudiado por mi cuenta, me lo explicaron en el segundo cuatrimestre. Me enseñaron a programar en el lenguaje Pascal, el cual probablemente ya estaba empezando a quedarse obsoleto cuando abrieron la escuela. Me enseñaron en 4 asignaturas a diseñar software (de la misma manera exactamente y con la misma bibliografía). Rechazaron un trabajo que yo había enviado porque estaba comprimido en .zip (libre) en vez de en .rar (de pago), aunque el descompresor de .rar abre los dos.  En una de las últimas asignaturas de tercero me han enseñado a instalar Apache en Windows (tiene delito), aunque cuando trabajamos con entornos web fue en segundo. Unos apuntes de un profesor auguraban "próximas generaciones de procesadores que podrían alcanzar la increíble cifra de los 1000Mhz". Y así podría seguir un buen rato. 

La carrera que yo cursé, si te gusta la informática, es totalmente genial y a veces incluso reconfortante. Pero de un momento a otro alguien va a tener que sentarse en una mesa muy grande llena de hombres vestidos de corbata y replantearla desde 0. En mi opinión, debería existir una rama central mucho más teórica y mucho más profunda aglutinando aquello que nunca va a cambiar en la informática y a partir de la cual los alumnos pudiésemos ir aprendiendo tecnologías de una forma coherente y escalonada (señores profesores, no nos enseñen a programar en Java casi antes de explicar la orientación a objetos). Del mismo modo, los profesores de estas tecnologías deberían aceptar el hecho de reciclar sus asignaturas cada cuatro o cinco años (a lo sumo) y debería estar prohibido que los profesores supliesen su carencia de conocimientos con sus experiencias vitales. 

Por delante una convocatoria de exámenes. Cada vez tienen menos emoción... 

Un saludo para todos.