Sunteți pe pagina 1din 14

Instituto Tecnolgico Superior de Lerdo 1 Teora fundamental de OpenGL

1.2 TEORA FUNDAMENTAL DE OPENGL


En esta seccin se describirn diferentes aspectos de la API OpenGL, tales como su estructura, sintaxis, forma de trabajo, entre otras caractersticas. Despus de esta seccin se comprender ms a detalle para qu sirve y como funciona OpenGL, adems se estar en posicin de poder empezar a utilizar esta API combinada con algn lenguaje de programacin, en este caso especficamente Visual C++.

1.2.1 Introduccin
OpenGL son las iniciales de Open Graphics Libraries, cuya traduccin literaria puede ser Bibliotecas de Grficos Abiertos. OpenGL no es un lenguaje, sino una API (Application Programming Interface) que se puede definir como un conjunto de funciones desarrolladas especficamente para manipular caractersticas del SO y del hardware. En este caso OpenGL es una API desarrollada para la creacin y manipulacin de grficos en tres dimensiones mediante funciones especializadas desarrolladas para este fin. OpenGL fue desarrollado por Silicon Graphics a principios de los aos 90 y posteriormente se libera para que cualquier programador pudiera hacer uso de esta API. Existe otra API grfica en el mercado llamada DirectX desarrollada por Microsoft, la cual presenta algunas variantes con respecto a OpenGL. Entre las principales desventajas de DirectX se enuncian la dificultad para manejarlo y aprenderlo, adems que slo funciona sobre los SO de Microsoft. Entre las ventajas se puede mencionar el acceso a funciones de bajo nivel para la manipulacin del hardware y del SO. De esta manera se puede deducir que DirectX es una buena API pero restringida a computadoras que manejan SO de Microsoft, con lo que se limita su portabilidad. Por Otro lado OpenGL es muy fcilmente portable a prcticamente cualquier plataforma como lo puede ser Linux, Unix, Solaris, MacOS, Windows, etc. OpenGL adems es ms sencillo de aprender y de manejar por lo que resulta ideal para lenguaje de aprendizaje y como lenguaje de aplicacin comercial. En pruebas realizadas a DirectX y a OpenGL bajo Windows, no se ha demostrado supremaca notoria de DirectX sobre OpenGL, por lo que realmente OpenGL tambin es buena opcin cuando se trata de programar grficos bajo las plataformas de Microsoft. De hecho el creador del juego Quake III Arena sorprendi a muchos cuando cambio el cdigo original del juego de DirectX a OpenGL consiguiendo con ello un cdigo ms claro, simple, compacto y portable que adems tena tan buen rendimiento que el original, demostrando as que OpenGL sigue siendo la mejor opcin entre las API grficas existentes.

1.2.2 Estructura y funcionamiento de OpenGL


OpenGL funciona como un autmata, es decir, trabaja como una mquina de estados finitos en la cual primero se debe declarar los atributos y caractersticas de los objetos y despus se despliegan en pantalla, ya con todas las caractersticas especificadas. De esta manera OpenGL se puede ver cmo una gigantesca mquina con muchos interruptores que al quedar encendidos estos no se apagan hasta que se indique lo contrario, por lo que todas las graficas desplegadas se visualizan de acuerdo a la posicin de estos interruptores. Para hacer esto, se debe seguir una serie de mandos que facilitan la definicin de atributos, as como la definicin de los objetos a dibujar. OpenGL a su vez determina la manera ms conveniente de

Instituto Tecnolgico Superior de Lerdo 2 Teora fundamental de OpenGL

desplegar los grficos en pantalla de acuerdo a la potencia y capacidad de la mquina en la que se este ejecutando el programa. Al proceso de dibujar los grficos en la pantalla se le conoce como renderizacin. OpenGL se compone de tres libreras principales y algunas adicionales que no son necesarias para el correcto funcionamiento de OpenGL. Las tres libreras principales de OpenGL son las siguientes: GL. Es la librera ms bsica de OpenGL, la cual contiene funciones para el manejo de colores, vrtices, dibujo de primitivas, manejo de luces, materiales, texturas, efectos de niebla, transformaciones geomtricas y en general las funciones ms bsicas de la API. GLU. Esta librera contiene funciones para el manejo de proyecciones, posicionamiento de cmara, figuras predefinidas, etc. GLUT. Esta librera es la que permite a OpenGL volverse independiente del SO y del lenguaje, ya que contiene funciones que le permiten crear ventanas, crear mens, detectar eventos generados desde teclado, ratn, o joystick, figuras predefinidas, entre otras funciones que provocan que OpenGL se independice del contexto en el que este corriendo la aplicacin.

1.2.3 Interaccin OpenGL mquina


OpenGL al ser una API grfica, necesita hacer uso de hardware grfico, es decir, tarjeta de video. Para que OpenGL se ejecute de una manera ptima, lo mejor es tener un tarjeta AGP, sin embargo, si no se cuenta con una tarjeta de estas caractersticas siempre se puede utilizar una PCI o bien, una tarjeta integrada, tomando as parte de la memoria RAM como memoria de video, aunque cualquiera de estas dos ltimas opciones presentan un menor rendimiento con respecto de una tarjeta AGP. Si OpenGL no detecta tarjeta de video de ningn tipo, entonces es capaz de realizar todos clculos mediante rutinas de software. Esto no siempre es posible para todas las aplicaciones y aunque fuera posible el renderizar todo mediante software involucra un menor rendimiento y menor velocidad al desplegar los grficos. En la siguiente figura se muestra el lugar que toman las libreras de OpenGL dentro de la ejecucin de un programa que es renderizado por software.

Instituto Tecnolgico Superior de Lerdo 3 Teora fundamental de OpenGL

Se puede observar en la figura anterior que la aplicacin hace uso directo de las funciones de OpenGL, el cual se encarga de renderizar la escena y mandarla a dibujar por medio del GDI (Graphics Device Interface) a la pantalla. La GDI es la API que se encarga de desplegar los grficos de Windows. Si el sistema operativo no es Windows, el esquema mostrado en la figura anterior es similar, slo se cambia la GDI por la API que utilice el otro sistema operativo para mandar las salidas a la pantalla. En la siguiente figura se puede observar el lugar que ocupa OpenGL cuando se corre la misma aplicacin en una mquina que cuenta con hardware para realizar el renderizado de las escenas (tarjeta aceleradora de video, AGP). Se puede observar que en estos casos OpenGL no necesita la API GDI para dibujar las escenas en la pantalla, de manera que se vuelve mucho ms veloz el despliegue total de la escena.

Instituto Tecnolgico Superior de Lerdo 4 Teora fundamental de OpenGL

1.2.4 Sintaxis de funciones, constantes, y tipos de datos en OpenGL


OpenGL es una API que maneja demasiados aspectos muy bien estandarizados y perfectamente definidos que hace fcil la identificacin de ciertas caractersticas. Esta estandarizacin provoca que las funciones y constantes de OpenGL sean fcilmente identificables de las funciones y constantes definidas en el lenguaje C++ o bien de las definidas por el programador. A continuacin se presenta la sintaxis que sigue OpenGL para sus funciones, constantes y tipos de dato. Funciones La siguiente figura muestra un ejemplo de una funcin de OpenGL, la sintaxis que se maneja para las funciones es muy sencilla y fcil de recordar, adems de estndar para todas las bibliotecas.

Donde: - La biblioteca o librera y el nombre de la funcin son de carcter OBLIGATORIO. - Nmero de argumentos y tipo de argumentos son de carcter OPCIONAL.

NOTA: Observa que el tipo de librera (gl, glu o glut) siempre es con minscula, que el
nombre de la funcin puede llevar ms de una palabra, en cuyo caso las palabras no se separan por lo que para distinguir una de otra deben de empezar con mayscula. El nmero de argumentos es opcional y el tipo de argumento se especifica mediante una sola letra (f = flotante, i = entero, d= doble). Adems se puede agregar al final del nombre una letra v minscula que seala si los parmetros se pasan en forma de vector o en forma independiente. Ejemplos: - glClear - glColor3f - glMaterialfv - glVertex3dv - gluLookAt - gluPerspective - glutSwapBuffers - glutInitWindowSize Constantes

Instituto Tecnolgico Superior de Lerdo 5 Teora fundamental de OpenGL

Las constantes el OpenGL se manejan usando slo letras maysculas. Al igual que en las funciones siempre se empieza con el nombre de la librera o biblioteca (GL, GLU o GLUT) y despus se especifican las palabras que definen en si el nombre de la constante. Todas las palabras se separan con guiones bajos y no llevan nmeros, slo letras, tal como se muestra a continuacin: LIBRERIA_ NOMBRE_CONSTANTE Ejemplos: - GL_QUADS - GL_LINE_LOOP - GL_LIGHT_MODEL_TWO_SIDES - GLU_OUTSIDE - GLU_SMOOTH - GLUT_DOUBLE - GLUT_DEPTH Tipos de Dato En esta caso los tipos de dato tambin siempre deben de empezar con la librera en la que se encuentran definidos con mayscula (GL, GLU o GLUT). Despus viene la palabra o palabras que definen el tipo de dato, todo se maneja de manera pegada sin separar nada. La primer palabra del tipo de dato debe de ser de puras minsculas y si lleva ms de una palabra las restantes empezarn con mayscula como se muestra a continuacin: LIBRERIAtipoDato Ejemplos: - GLdouble - GLfloat - GLunsignedInt - GLbyte - GLUquadricObj

NOTA: Es importante sealar que como OpenGL fue escrito originalmente con el
lenguaje C++ tiene mucha de su sintaxis igual a la de este lenguaje. Incluso los tipos de datos definidos para OpenGL son equivalentes a los de C++, por lo que un GLint equivale a un int de C++. Esto se puede aprovechar para definir la mayora de los datos en el formato de C++ y as trabajar con los tipos de datos ms familiares para la mayora de los programadores.

1.2.5 Pasos para generar aplicaciones con OpenGL


Para generar cualquier escena, mundo virtual, animacin, simulacin juego en OpenGL se debe seguir una secuencia de 5 pasos fundamentales, los cuales a su vez se pueden subdividir en varios pasos ms. Los 5 pasos fundamentales son los siguientes: 1.- Inicializacin general.- En este paso se deben de especificar caractersticas que permanecen constantes o que difcilmente cambiarn a lo largo de toda la ejecucin

Instituto Tecnolgico Superior de Lerdo 6 Teora fundamental de OpenGL

del programa. Estas caractersticas son tomadas en cuenta por el SO para poder desplegar adecuadamente las graficas y responder a los eventos. Algunas de estas caractersticas son las siguientes: tamao y posicin de la ventana, tipo de paleta de colores, especificacin de funciones para dibujos, interaccin con el usuario, interaccin con la mquina, etc. 2.- Inicializacin del ambiente.- Aqu se especifican caractersticas pertenecientes a la aplicacin, pero que en general afectan a todos los objetos de la escena, caractersticas tales como: tipo de proyeccin, luces que intervienen, inicializacin de niebla, compilacin de listas, habilitacin del buffer de profundidad, inicializacin de la cmara, lectura de archivos para texturizacin, ocultamiento de caras, y algunas caractersticas ms. 3.- Transformaciones y Caractersticas.- Se deben especificar las transformaciones y caractersticas individuales de cada objeto. Las caractersticas ms comunes a cambiar son las siguientes: colores, tipo de material, tipo de textura, nivel de transparencia, etc. Las transformaciones que se deben de especificar son las siguientes: traslaciones, rotaciones, escalaciones, cmara, recortes de escena, transformaciones de textura, entre otras. 4.- Dibujado.- En este punto se debe de especificar el dibujo que se desea realizar el cual puede estar formado a base de primitivas (figuras bsicas) de objetos predefinidos (objetos precargados y ms elaborados que las primitivas); incluso por ambos. Adems, se pueden establecer algunas caractersticas como: colores, normales, coordenadas de texturizacin y la forma en que se iluminar el objeto. 5.- Actualizacin de Pantalla.- Se le debe de indicar a OpenGL que existe algn cambio en el dibujo o escena para que este se encargue de actualizar la pantalla. Si las actualizaciones son constantes y veloces se consigue una animacin.

NOTA: Los pasos dados anteriormente se encuentran dentro de un ciclo principal que
abarca de los pasos 2 al 5 o bien de los pasos 3 al 5, dependiendo de las caractersticas de la aplicacin. En cualquier caso, el paso 1 est fuera del ciclo.

1.2.6 Estructura de un programa con Visual C++ y OpenGL


Todos los programas que se realicen en este curso sern desde Visual C++ en modo consola utilizando OpenGL con la librera GLUT.H. Esto implica que todo se har con lneas de cdigo sin gozar de los beneficios de los modos grficos de programacin. De esta manera el ambiente de programacin ser parecido al amiente de programacin de un lenguaje para MS-DOS como Turbo C++ o Pascal, pero con la ventaja de estar trabajando bajo ambiente de Windows y ejecutando las funciones de OpenGL. Tambin se usar la programacin estructurada como base fundamental del curso, sin embargo todo lo que se analice en este curso se puede programar fcilmente con programacin orientada a objetos. La estructura bsica de los programas ser la siguiente: //Seccin de libreras #include <glut.h>

Instituto Tecnolgico Superior de Lerdo 7 Teora fundamental de OpenGL

//Seccin de prototipos de funciones void Inicializa(); //Declaracin de variables globales int x,y; //Funcin principal del sistema void main() { //Paso 1: Inicializacin general } //Funcin de inicializacin del contexto (paso 2) void Inicializa() { //Paso 2: Inicializacin del contexto } //Funcin de dibujado void Dibuja() { // Pasos 3, 4 y 5 de los 5 pasos bsicos } //Funciones adicionales La estructura antes presentada se usar en todos los programas, obviamente sufriendo cambios y expandindose conforme se vayan avanzando en los diferentes temas. Se puede decir entonces que este es el esqueleto de los programas con Visual C++ y OpenGL y slo resta ir agregando ms y ms funciones.

1.2.7 Pasos para la inicializacin general de OpenGL

Instituto Tecnolgico Superior de Lerdo 8 Teora fundamental de OpenGL

Para poder inicializar correctamente OpenGL se necesitan de algunas lneas de cdigo que le sealarn diferentes aspectos y caractersticas que tendr el programa que se va a desarrollar. Los pasos que se deben de seguir se describirn a continuacin mediante una breve explicacin, definicin de la funcin a utilizar y un ejemplo. Paso 1. Inicializacin del modo de despliegue Esto es equivalente a decirle a un pintor con que tipo de tcnica tiene que dibujar, con que tipo de material, que tipo de colores y hasta el tipo de pinceles. En esta parte se le debe de indicar a OpenGL todas las caractersticas ms bsicas que tendr el programa. Para esto se debe de utilizar la siguiente funcin: void glutInitDisplayMode(unsigned int modo); El parmetro modo sirve para elegir dentro de una gran variedad de valores posibles. Los valores que puede tomar este parmetro se pueden subclasificar en 3 grupos como sigue: Seleccin de paleta de colores. Con esto se escoge el tipo de espacio de color que se usar. En este caso se debe de escoger un tipo de paleta de colores de tres opciones posibles: - GLUT_RGB, usa paleta de color del tipo rojo, verde y azul. Esta ser la que se usar por default en todos los programas. - GLUT_RGBA, igual a la anterior slo que esta le agrega un canal ms de color que es el de las transparencias, no es necesario escoger esto para trabajar con transparencias. - GLUT_INDEX, sirve para crear la paleta de colores a mano, pero esto involucra un gran trabajo y acceso a funciones del sistema de bajo nivel. Seleccin del buffer de efectos. Estos buffer son los encargados de lograr ciertos efectos especiales y realismo en las grficas en 3D. Se tienen tres opciones a escoger: - GLUT_DEPTH, este buffer sirve para determinar que objetos tapan a otros dentro de una escena tridimensional, es decir, determina la profundidad a la que se encuentra cada objeto de la escena. Este ser el buffer que se utilizar por default en las aplicaciones de este curso. - GLUT_ACCUM, este buffer sirve para lograr efectos de reflejos y seleccin de objetos por medio del mouse, requiere programacin de bajo nivel y por cuestiones de tiempo no se utiliza. - GLUT_STENCIL, con este buffer se pueden conseguir efectos de sombras muy realistas, al igual que el buffer anterior requiere de programacin de bajo nivel y se sale de los alcances de este curso. Seleccin del buffer de animacin. Con este buffer es con el que se consiguen las animaciones. OpenGL necesita de un buffer de animacin para poder generar movimientos realistas en las escenas cuando estas se muevan. En este caso se cuenta con dos opciones:

Instituto Tecnolgico Superior de Lerdo 9 Teora fundamental de OpenGL

- GLUT_SINGLE, este buffer no es recomendable debido a que como es un buffer sencillo este tiende a parpadear de manera molesta cuando se hace una animacin. Es ms bien til para escenas que nunca cambian. El efecto de parpadeo se debe a que se borra y re-dibuja siempre sobre la misma ventana, por lo que se alcanza a percibir todo el proceso de actualizacin. - GLUT_DOUBLE, este es el buffer que siempre se utilizar ya que evita por completo el parpadeo de la pantalla cuando existe una actualizacin. Se logra evitar el parpadeo por que OpenGL realiza el dibujo a escondidas en una memoria auxiliar. Cuando este dibujo esta concluido actualiza la pantalla pero por un simple intercambio de la pantalla anterior por la nueva, es decir, ya no consume tiempo en redibujar sobre la nueva. La siguiente figura ilustra este concepto:

Pantalla oculta MEMORIA Cambio de Buffer

Re-dibujando

Pantalla visible MONITOR

Como se puede observar el parmetro modo debe de escoger 3 constantes de entre 8 posibles valores. Aqu debera de surgir la duda: Cmo le voy a mandar 3 constantes a OpenGL cuando la funcin glutInitDisplayMode slo recibe un valor de tipo entero? La respuesta en este caso es mandar todas las constantes juntas separadas por una operacin OR lgica a nivel de bit, de la siguiente manera: Ejemplo: void main() { glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); } De esta manera C++ primero aplicar un OR a nivel de bits y el resultado final ser un nmero en binario que ser el nmero que realmente se pase como parmetro a la funcin. Tmese el siguiente caso como ejemplo:

Instituto Tecnolgico Superior de Lerdo 10 Teora fundamental de OpenGL

Ejemplo: GLUT_RGB = 0 1 0 0 0 0 0 0 OR GLUT_DEPTH = 0 0 0 1 0 0 0 0 OR GLUT_DOUBLE = 0 0 0 0 0 0 0 1 MODO = 0 1 0 1 0 0 0 1 Donde modo tendr un valor binario de 01010001 al terminar la operacin OR lgica, con este valor OpenGL sabr perfectamente cuales fueron las caractersticas escogidas por el programador.

NOTA: La funcin glutInitDisplayMode SIEMPRE deber ser la PRIMERA


lnea de cdigo del main debido a que es la inicializacin ms bsica y sin esta todo lo dems de OpenGL no podr funcionar adecuadamente. Paso 2. Creacin de la ventana de dibujado Este paso es el equivalente a decirle al pintor sobre que superficie dibujar, las dimensiones de esa superficie y proporcionarle el lienzo. Ya que OpenGL sabe las caractersticas mnimas que necesita conocer para realizar los dibujos, el siguiente paso es crear la ventana en la cual se realizarn dichos dibujos. Cabe sealar que como se trabaja con Visual C++ en conjunto con OpenGL cada uno crear su propia ventana. De esta manera se tendr una ventana de slo texto, creada por Visual C++ y adems se tendr una ventana que es sobre la que se dibujar, creada por OpenGL. Esta dualidad de ventana presenta ms ventajas que desventajas a la larga. Antes de darle a OpenGL la instruccin explcita de que cree una ventana es necesario indicarle el tamao que la ventana tendr as como la posicin inicial de esta ventana en el monitor. Para indicar el tamao que tendr la ventana se tiene que hace uso de la siguiente funcin: void glutInitWindowSize(int ancho, int alto); Donde: ancho y alto estn dados en pixeles, por eso se manejan valores enteros, ya que el pxel ya es una unidad indivisible. Cabe sealar que con esta funcin no se ha creado an la ventana, slo se le ha especificado a OpenGL el ancho y alto que tendr una vez que sea creada. Tambin se debe de especificar la posicin de la ventana dentro del monitor, para lo cual se emplea la siguiente funcin: void glutInitWindowPosition(int x, int y); Donde: x y y estn dados en pixeles, de ah que estn definidos como enteros los parmetros de la funcin. Al igual que en la llamada a la funcin anterior, hasta aqu an no se ha creado la ventana slo se han indicado sus dimensiones y posicin pero si se ejecutara hasta aqu el programa se observara que efectivamente la ventana an no ha sido desplegada. Pero por qu an no se despliega la ventana? Resulta que para

Instituto Tecnolgico Superior de Lerdo 11 Teora fundamental de OpenGL

que eso ocurra se debe de llamar una funcin ms, la cual se encargar de crear la ventana en cuestin y hasta se podr especificar un nombre. La funcin que se necesita se define de la siguiente manera: void glutCreateWindow(const char *titulo); Donde titulo es una cadena, de manera que se debe de especificar el ttulo de la ventana entre comillas dobles, de esta forma se puede especificar el nombre de la ventana y ahora s se crear la ventana con el tamao y la posicin que se haban especificado anteriormente. Observese el siguiente ejemplo: Ejemplo: void main() { glutInitWindowSize(600,400); glutInitWindowPosition(100,50); glutCreateWindow(Mi primer programa); } A continuacin se muestra una figura en la que se puede observar el resultado de la ejecucin de las lneas de cdigo anteriores:

y = 50 x = 100 Mi primer programa

x = 600

y = 400

MONITOR
Paso 3. Especificar la funcin de dibujado

Instituto Tecnolgico Superior de Lerdo 12 Teora fundamental de OpenGL

En estos momentos OpenGL ya tiene todo lo necesario para empezar a dibujar: ya tiene los colores, pinceles y hasta el lienzo, slo le falta saber quien ser el pintor. Bsicamente lo que OpenGL necesita es saber a que funcin deber mandar llamar cada vez que quiera dibujar la escena. Una escena en OpenGL se tiene que estar redibujando constantemente debido a cambios en el tamao de la ventana, cambios de posicin, maximizacin y minimizacin, etc. Cada vez que ocurra uno de estos eventos OpenGL est obligado a re-dibujar la escena y para esto se necesita de una funcin que se encargue siempre de esto. Entonces, como siguiente paso lo que se debe de hacer es especificar de manera clara a OpenGL quien ser la funcin encargada de dibujar. Esta funcin debe de ser una funcin definida por el programador, que puede llevar el nombre que sea, pero que no debe de regresar valor alguno ni recibir parmetros. En este curso a esta funcin siempre se le llamar Dibuja, aunque puede llevar el nombre que se necesite o desee. Ya que se tiene declarado el prototipo de la funcin que se encargar de dibujar se debe de mandar llamar, es decir, indicarle a OpenGL que esa funcin llamada Dibuja ser la encargada de desplegar los grficos. Para eso se utiliza la siguiente funcin: void glutDisplayFunc(void *NombreFuncion(void)); Con esto OpenGL ya sabe que funcin es la encargada de dibujar y cada vez que requiera dibujar la escena va a mandar llamar a esta funcin. Slo falta agregar el cuerpo de la funcin para que esta dibuje, de hecho en la funcin Dibuja es donde estarn todas las lneas de cdigo relacionadas con el dibujo, ser entonces la funcin ms importante de todas. A continuacin se muestra un ejemplo de este proceso: Ejemplo: //Seccin de prototipos de funciones void Dibuja(); //Funcin principal del sistema void main() { glutDisplayFunc(Dibuja); } -

Instituto Tecnolgico Superior de Lerdo 13 Teora fundamental de OpenGL

//Funcin de dibujado void Dibuja() { // Obras de arte } -

Paso 4. Arrancar el ciclo principal OpenGL ya est listo para poder dibujar puesto que ya conoce absolutamente todo lo que necesita de inicializacin general, sin embargo se tiene que recordar que un programa estructurado termina cuando se ejecuta la ltima lnea del programa. Esto involucra que ya que OpenGL termine de ejecutar las 5 lneas de la inicializacin el programa terminar y todo se cerrar. Esto no debe de ser as porque an cuando se alcance a dibujar algo, apenas se tendra tiempo para verlo y la ventana se cerrara. Esto pasa con todos los lenguajes estructurados y por eso es que se le agregan instrucciones que pausan la pantalla mientras el usuario no presiona alguna tecla. En OpenGL no se agrega una lnea para pausar la pantalla, se agrega una lnea que arranca un ciclo infinito, de esta manera la aplicacin jams terminar, sino hasta que se cierre la ventana que esta en ejecucin. Con esto siempre se mantendr la ventana abierta y se podrn apreciar por el tiempo que sea necesario la escena desplegada. La funcin encargada de arrancar este ciclo principal es la siguiente: void glutMainLoop(); Y se puede observar claramente que no recibe ni regresa nada, puesto que su nica labor es arrancar este ciclo infinito. A continuacin se muestra un ejemplo de cmo se manda llamar a esta funcin: Ejemplo: void main() { glutMainLoop(); }

NOTA: La funcin glutMainLoop siempre, SIEMPRE, debe ser la LTIMA


lnea de cdigo de la funcin main. De no ser as los resultados y funcionamiento del programa pueden ser imprevisibles, en el mejor de los casos no correr.

Instituto Tecnolgico Superior de Lerdo 14 Teora fundamental de OpenGL

NOTA: Hasta aqu ya se analiz cmo es que se inicializa de manera general


OpenGL, an falta la inicializacin del contexto que se ve en el siguiente apartado, cabe sealar que la funcin Inicializa que es la encargada de la inicializacin del contexto se debe de mandar llamar desde la funcin main, por lo que an se debe de agregar otra lnea ms donde se mande llamar a Inicializa.