OPENGL

Page 1

1.- Introducción a OpenGL. 1.1- ¿Qué es OpenGL ? 1.2.- Estructura de un programa 1.3.- Sintaxis. 1.4.- Máquina de estados 1.5.- Librerías afines a OpenGL

1.1.- ¿ QUÉ ES OPEN GL ? Las librerías gráficas OpenGL, son un software que facilita el interface con el hardware gráfico de nuestra máquina. Consta de unas 120 funciones distintas, que especifican los objetos y las operaciones necesarias para producir aplicaciones interactivas en las que intervienen gráficos en tres dimensiones. Esta diseñado de forma completamente independiente del hardware por lo que puede implementarse en plataformas muy diversas (PC, SGI, Digital, Sun, etc…. El precio que hay que pagar en aras de esta portabilidad, es que OpenGL no incluye comandos para gestionar el sistema de ventanas, ni para capturar órdenes de los usuarios, ya sea por ratón o por teclado. En lugar de esto, debemos trabajar con la ayuda de cualquier sistema de ventanas que se utilice en la máquina en concreto en la que estemos trabajando. En nuestro caso utilizaremos el sistemas de ventanas de Windows.


Informática gráfica.

1.- Introducción a OpenGL. Página: 2

Igualmente OpenGL tampoco incluye comandos de alto nivel para modelar objetos complejos. Para este trabajo incluye una serie de primitivas geométricas muy básicas, tales como definición de puntos, líneas y polígonos. Las operaciones que podemos realizar con OpenGL, y en general siguiendo este orden son las siguientes: 1.- Modelar figuras a partir de las primitivas básicas, creando descripciones geométricas de los objetos (puntos, líneas, polígonos, fotografías y mapas de bits). 2.- Situar los objetos en el espacio tridimensional de la escena y seleccionar el punto de vista desde el cual queremos observarla. 3.- Calcular el color de todos los objetos. El color puede asignarse explícitamente a cada pixel, o bien puede calcularse a partir de las condiciones de iluminación, o también puede asignarse por medio de una textura colocada sobre los objetos. 4.- Convertir la descripción matemática de los objetos y la información de color asociada, en pixeles de la pantalla, en forma de imagen virtual 3D. A la vez que se realiza este proceso, OpenGL desarrolla otras operaciones complejas como la eliminación de partes de objetos que quedan ocultas para el usuario por estar tapadas por otros objetos de la escena.

1.2.- ESTRUCTURA DE UN PROGRAMA. Debido a la gran versatilidad de OpenGL, un programa basado en estas librerías puede llegar a ser muy complejo. De todas formas la estructura básica de un programa es muy sencilla, y siempre consta de las siguientes partes: • Inicializar ciertos estados que controlan como se desarrolla el proceso de rendering. • Especificar qué objetos deben visualizarse, describiendo su geometría y sus propiedades externas. El término rendering hace referencia al proceso por el cual un ordenador genera una imagen sintética, con sus luces y objetos, a partir de un modelo. Un modelo de un objeto, es una descripción matemática de ese objeto basado en sus primitivas geométricas, que en este caso son puntos, líneas y polígonos. También se pueden incluir propiedades no geométricas como el color, el tipo de material, etc... A continuación, tenemos un ejemplo muy sencillo de programa con OpenGL. Aunque en principio las rutinas que aparecen y su sintaxis sea desconocida, debemos centrarnos en observar las diferentes secciones del programa. Este programa genera un cuadrado blanco

ESCET- UNIVERSIDAD REY JUAN CARLOS DE MADRID.


Informática gráfica.

1.- Introducción a OpenGL. Página: 3

sobre un fondo de pantalla negro, trabajando en dos dimensiones, por lo que no efectúa ninguna operación para situar el punto de vista de observador en el espacio 3D. #include <GL/gl.h> #include <GL/glu.h> main () { OpenMainWindow (); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho (-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glBegin (GL_POLYGON); glVertex2f (-0.5, -0.5); glVertex2f (-0.5, 0.5); glVertex2f ( 0.5, 0.5); glVertex2f ( 0.5, -0.5); glEnd (); glFlush (); } La primera rutina abre una ventana en la pantalla del ordenador. Esta función evidentemente no pertenece a OpenGL y por lo tanto, debe tomarse del gestor de ventanas que utilice cada máquina en concreto. Las funciones siguientes son propias de OpenGL. glClearColor establece el color actual, y glClear es la que realmente borra la pantalla con el color antes indicado. Igualmente la función glColor3f(), establece qué color utilizar para dibujar objetos; en este caso se usa el color blanco (1.0, 1.0, 1.0). Todos los objetos dibujados a continuación utilizarán este color, a menos que se cambie por medio de otra función. La siguiente función de OpenGL utilizada en el programa es glOrtho(), que especifica el sistema de coordenadas 3D que se utiliza para pintar la escena, y como se mapea esta en la pantalla. Después las funciones glBegin() y glEnd(), definen la geometría del objeto. Entre estas dos funciones se definen los objetos que aparecerán en la escena, por medio de las funciones glVertex2f(). En este caso se utilizan coordenadas en dos dimensiones pues la figura que se quiere representar es un plano. Finalmente la función glFlush() asegura que los comandos anteriores se van a ejecutar.

1.3.- SINTAXIS. Como se puede observar en el ejemplo anterior, las funciones de OpenGL siempre comienzan por las letras "gl", en minúscula. El resto de la función lleva siempre la inicial de cada palabra en mayúscula y el resto de la palabra en minúscula. Sin embargo, las constantes

ESCET- UNIVERSIDAD REY JUAN CARLOS DE MADRID.


Informática gráfica.

1.- Introducción a OpenGL. Página: 4

definidas en OpenGL son todas en mayúsculas, y uniendo las palabras con subrayados, por ejemplo GL_COLOR_BUFFER_BIT.

Las funciones pueden aceptar varias formas para sus argumentos, pudiendo variar su número y su tipo. En la tabla 1.1, podemos ver las letras utilizadas como sufijos que se añaden al final del nombre de cada función, para especificar los tipos de datos de los parámetros, el formato de datos al que corresponde, y su definición tanto en el lenguaje C, como su equivalente en OpenGL.

Tabla 1.1 SUFIJOS

TIPO DE DATOS

DEFINICIÓN EN LENGUAJE C

DEFINICIÓN DEL TIPO EN OPENGL

b s i f d ub us ui

Entero 8 Bits. Entero 16 Bits Entero 32 Bits. Real 32 Bits. Real 64 Bits. Entero positivo 8 Bits. Entero positivo 16 Bits Entero positivo 32 Bits.

signed char short long float double unsingned char unsingned short unsingned long

GLbyte GLshort GLint, GLsizei GLfloat, GLclampf GLdouble, GLclampd Glubyte, GLboolean GLushort Gluint, GLenum, Glbitfield

De esta forma dos comando tales como: glVertex2i (1, 3); glVertex2f (1.0, 3.0); son equivalentes excepto que el primero especifica los vértices como enteros de 32 bits, y el segundo los especifica como números reales en coma flotante de simple precisión. Algunos funciones de OpenGL utilizan el sufijo "v", para indicar que reciben como argumento un vector o array, que contiene los datos, en lugar de varios argumentos individuales. De esta forma las dos funciones que siguen a continuación son equivalentes: glColor3f (1.0, 1.0, 1.0); float color_array[] = {1.0, 1.0, 1.0}; glColor3fv (color_array);

ESCET- UNIVERSIDAD REY JUAN CARLOS DE MADRID.


Informática gráfica.

1.- Introducción a OpenGL. Página: 5

Por último señalar que OpenGL define la constante "GLvoid" en lugar de void del lenguaje C.

1.4.- MÁQUINA DE ESTADOS. OpenGL funciona para muchas propiedades como una máquina de estados. Es decir si a una propiedad se le asigna un valor determinado, todo lo que se haga a partir de ese momento se verá afectado por ese valor, hasta que este se modifique o desactive de forma explícita. Por ejemplo, una de esas propiedades es el color actual, con el que se pintan los objetos. De esta forma, si asignamos a la propiedad color actual por ejemplo el valor ROJO, todos los puntos, líneas y polígonos que se dibujen a continuación serán de color rojo, hasta que se modifique este valor de forma explícita, mediante la función adecuada. Las propiedades que funcionan de esta forma son: • Color actual.

• Punto de vista. • Transformaciones de proyección. • Estilo de líneas y polígonos. • Modos de dibujar polígonos. • Convenciones de empaquetado de bits. • Posición y características de las fuentes de iluminación. • Propiedades de los materiales de los objetos. Cada variable de estado o modo tiene un valor por defecto y existen también funciones para conocer el valor actual de esa variable. Además estas variables de estado se pueden ir almacenando en una pila. Este recurso es útil cuando se necesita almacenar el estado actual de la escena para restablecerlo posteriormente. Las funciones que permiten acceder a la pila son glPushAttrib (), para insertar un valor en la pila, y glPopAttrib (), para sacar el último valor insertado en la pila. Además es mucho más eficiente preguntar el estado de una variable mediante estas funciones que a través de las funciones específicas que veremos más adelante.

1.5.- LIBRERÍAS AFINES A OPENGL. OpenGL proporciona un conjunto de comandos poderoso pero a la vez sencillo, para generar una escena tridimensional en la pantalla de nuestro ordenador. Así pues, todas las operaciones gráficas realizadas a alto nivel deben basarse en estos comandos.

ESCET- UNIVERSIDAD REY JUAN CARLOS DE MADRID.


Informática gráfica.

1.- Introducción a OpenGL. Página: 6

De cualquier forma, se pueden construir una serie de librerías más elaboradas y que por lo tanto, amplíen la capacidad del entorno y hagan más sencilla la programación de ciertas aplicaciones, como aquellas relacionadas con el gestor de ventanas, o bien disponer de comandos de edición de alto nivel. Algunas de esas librerías están ya preparadas para facilitarnos el trabajo. En concreto las que actualmente proporciona OpenGL son las siguientes:

• OpenGL Utility Library (GLU): Esta librería proporciona una serie de funciones que sirven para tareas tales como actualizar matrices para obtener orientaciones y proyecciones del punto de vista adecuado, generar superficies etc... Todas las funciones de esta librería comienzan por las letras “glu”, y se irán describiendo a medida que sean útiles. • OpenGL Auxiliary Library (AUX): Son muy útiles y cubren una gran variedad de funciones como gestionar las ventanas, gestionar los eventos de entrada a la aplicación o dibujar objetos complejos en 3D. OpenGL Extention to the X Windows System (GLX): Se utilizan para trabajar con el sistema de ventanas X Windows. Utilizan el prefijo “glx” pero no las utilizaremos a lo largo de este curso. Como punto final de esta introducción se ha configurado una útil tabla con todas las funciones de la librería “aux”, divididas según su misión: • Funciones de inicio de ventana. • Gestión de eventos. • Dibujar Objetos tridimensionales. • Procesos en background. • Ejecución del programa.

ESCET- UNIVERSIDAD REY JUAN CARLOS DE MADRID.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.