| Artículos | 01 ENE 1995

El estándar gráfico OpenGL (y II)

Tags: Histórico
Herramienta que se ofrece con código fuente en C y ensamblador
David Rodríguez.

Una alianza de las grandes casas de software ha permitido poner en un PC una librería gráfica que estaba reservado a las grandes estaciones Unix.

En el anterior número de esta revista habíamos comenzado la descripción del OpenGL, básicamente una interfaz entre el programador y el hardware gráfico. Recordemos que, como su nombre indica -GL viene de librería gráfica- esta interfaz no es más que una colección de funciones en formato del lenguaje C. Recordemos también, pues nos ayudará a identificar las tareas que nos corresponden, aquellos procesos que sigue OpenGL para crear una imagen: 1) construir los objetos a partir de las primitivas geométricas, haciendo una descripción matemática de los mismos; 2) ordenar los objetos en el espacio tridimensional y seleccionar el punto de vista del observador, desde el que se va a tomar la escena; 3) calcular el color de todos los objetos, que podría ser asignado explícitamente por la aplicación según las condiciones de luz, o bien obtenido pegando una determinada textura en los objetos; 4) finalmente, convertir la descripción matemática de los objetos y su información de color asociada en puntos o pixels de pantalla.

Puntos y líneas

El elemento más básico que puede ser dibujado es un punto, el cual está constituido por lo que llamamos un vértice (conjunto de valores que lo posicionan). Para posicionar un vértice, se necesitan cuatro parámetros (x,y,z,w), de los cuales, el último suele valer siempre 1. Cuando nos referimos a un espacio plano, de sólo dos dimensiones, desechamos el valor z, el cual pasará a ser siempre 0.

El término línea se refiere a un segmento de línea, el cual se define mediante dos vértices. Cuando las líneas se agrupan, formamos polígonos, los cuales deben seguir dos reglas importantes: primera, sus líneas no pueden intersecarse y, segunda, deben ser convexos. De no seguir estas reglas, los resultados de los rellenos de los objetos pueden ser imprevisibles. Por supuesto, un polígono que no cumpla estas reglas siempre podrá descomponerse en otros polígonos que sí las cumplan.

Mediante la función glVertex() en cualquiera de sus versiones, pasamos en sucesivas llamadas todos los vértices del polígono. Previamente hemos de hacer una llamada a glBegin() para indicar el tipo de figura, por ejemplo GL_POLYGON y terminaremos la secuencia con un glEnd(). La figura 1 proporciona una lista de las primitivas geométricas que pueden ser usadas.

Todas las líneas tienen dos propiedades que son el grosor y el tipo de trazo. Con los polígonos cerrados, sin embargo, hemos de hablar de rellenos sólidos y de caras. También podemos elegir y entresacar las caras frontales o las dorsales.

Vectores Normales

Se dice que un vector es normal a una superficie si su dirección es perpendicular a la misma. Los vectores normales sirven para orientar las superficies en el espacio respecto a los puntos de luz. Dicho de otra manera, OpenGL los utiliza para saber cuánta luz recibe un objeto en un vértice determinado.

Si no vamos a utilizar las capacidades de iluminación de OpenGL -cosa improbable- podemos olvidarnos de ellos. En caso contrario, más vale que aprendamos un poco de geometría pues los vectores normales tienen que ser proporcionados por el programa.

En los casos más típicos de polígonos simples y esferas, calcular la normal de cada vértice es bastante sencillo. Sin embargo, ante otros supuestos puede llegar a ser todo un problema matemático.

Vistas o perspectivas

Sabemos que los objetos están en el espacio tridimensional, con unas dimensiones y que la pantalla de nuestro ordenador es plana. Nos queda por averiguar cómo trasladamos los vértices de un sistema al otro. En este proceso, existen cuatro transformaciones: de la perspectiva, del modelo, de la proyección y del puerto de visualización.

Para comprender mejor el sistema, suele utilizarse el símil de una cámara, la cual pretende recoger la imagen en nuestra pantalla. La transformación de perspectiva es siempre el primer paso y su misión es obvia: posicionar la cámara correctamente. Todas las transformaciones son realizadas gracias al empleo de una matriz, la cual se va combinando con diversos valores hasta alcanzar el resultado final. Esta matriz, concretamente, está formada por 16 elementos (4 x 4).

nsformación de perspectiva posiciona y orienta la cámara, mientras que la transformación del modelo posiciona y orienta el modelo. Las sentencias en OpenGL nos permitirán variar tanto la cámara o el modelo (o ambos) dependiendo del tipo de aplicación que se pretende realizar. Dicho de otra forma, imaginemos que vamos a realizar una foto de la familia completa y no caben todos: tanto podemos alejarnos nosotros del objetivo fotográfico como decirles a ellos que retrocedan, obteniendo el mismo resultado. En los ordenadores, será precisamente la lógica de los programas -y del analista que los diseña- la que decida las operaciones que son más convenientes para sus propósitos.

La transformación de la proyección es algo más técnica, y es equivalente a elegir un objetivo focal para la cámara. De alguna manera decidimos los objetos que van a entrar en nuestro campo de acción mediante el empleo de un zoom. Adicionalmente, los ordenadores tienen algunas propiedades más. Una de ellas es el tipo de perspectiva que se ha de crear, la cual puede ser natural, que, al igual que el ojo humano, tiene una distorsión según la distancia (los objetos más lejanos se nos aparecen más pequeños, aún teniendo el mismo tamaño), o bien ortográfica, donde el relativo tamaño no tiene importancia y las líneas son rectas. La elección de una u otra dependerá de si queremos mostrar la apariencia de un producto final, o bien estamos trabajando técnicamente en proyectos de arquitectura o ingeniería.

Finalmente, tenemos una transformación más que ya es más particular, denominada del puerto de visualización (viewport), que consiste en cómo representar la imagen generada en la pantalla del ordenador y más concretamente en nuestra aplicación. Lo que seleccionamos es la porción de imagen que va a representarse, dónde va a hacerlo y si debe ser agrandada o reducida. Este último punto equivale a ajustar el producto final de los cálculos con la ventana de Windows donde deban ser representados.

Listas de visualización

Hace ya casi un año que aparecieron en PC World un par de artículos dedicados a la creación de una librería DLL que pretendía solucionar en Windows una de sus mayores carencias: el mantenimiento de objetos en la pantalla. En efecto, los programadores de lenguaje C sabemos que la aplicación es la responsable de redibujar la pantalla para mantenerla. Además, cuestiones de rendimiento obligan a mantener algún tipo de lista precalculada que se pueda visualizar rápidamente.

Aunque OpenGL no soluciona directamente estos problemas, sí incorpora un mecanismo que permite, en la mayoría de los casos, incrementar la velocidad. Una lista de visualización es un espacio donde se construye una sucesión de comandos. Su propiedad fundamental es que, una vez creada la lista, no puede ser modificada. La velocidad es, al menos, igual cuando la lista se ejecuta de forma local. En muchos casos, esta velocidad es superior, sobre todo cuando se aplican transformaciones globales a la lista. Sin embargo, donde se obtienen innegables y evidentes ventajas es cuando se trabaja en red: el tráfico de información se reduce considerablemente al transportar únicamente las listas ya construidas.

Aquellos procesos que toman ventaja de las listas de visualización son los siguientes: operaciones con matrices (en la lista se almacenan internamente la matriz calculada y su inversa), imágenes y bitmaps (se almacena la imagen convertida a un formato acorde con el hardware), iluminación, propiedades de materiales y modelos de ilu<

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información