Вы находитесь на странице: 1из 7

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P.

Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

Laboratorio 07

Listas de Visualizacin en OpenGL


Las Display List permiten una programacin ms transparente.

Objetivo: El objetivo de esta prctica, es que el alumno conozca y sepa cmo aplicar los principales comandos de manejo de listas de visualizacin en OpenGL, esto es, con la intencin de estructurar el diseo de los objetos geomtricos, adems de hacer ms legible el cdigo y por supuesto de obtener un menor tiempo de respuesta en la aplicacin. Duracin de la Prctica: 2 Horas. Lugar de realizacin: Laboratorio de cmputo. El conocimiento requerido para realizar esta prctica es de haber asimilado los conceptos bsicos de Visual C++ y OpenGL. El desarrollo tendr la siguiente estructura de temas: 1. 2. 3. 4. Listas de visualizacin Programa ejemplo con OpenGL Ejercicios propuestos Referencias

Mg. Johnny R. Avendao Q.

Pag. No. 1

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P. Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

1. LISTAS DE VISUALIZACIN Usualmente en cada escena es necesario mostrar un mismo objeto geomtrico bajo ciertas condiciones propias del guin, a esto hay que sumarle la posibilidad de que se involucre riqueza visual; esto usualmente puede hacer mas lento la aplicacin grfica. Un ejemplo simple es el cdigo siguiente: Void dibujar_circulo(Glfloat radio) { Glint i; Glfloat x,y; glBegin(GL_POLYGON) for(i=0;i<1000;i++){ x=radio*cos(i*2*pi/1000); y=radio*sin(i*2*pi/1000); glVertex2f(x,y); } glEnd(); } Esta tcnica se vuelve ineficiente debido a los clculos trigonomtricos necesarios cada vez que se pida renderizar el crculo, es decir, se lleva a cabo mucho computo numrico. Una forma de evitar esto es, almacenar primero las coordenadas en un tabla (puede ser un arreglo) y luego usarla cada vez que se necesite renderizar el dibujo. Por ejemplo: Glint i; Glfloat x,y,radio=5; static Glfloat coordenada[1000][2] for(i=0;i<1000;i++){ coordenada[i][0]=radio*cos(i*2*pi/1000); coordenada[i][1]=radio*sin(i*2*pi/1000); } // Extraccin y encapsulamiento de los datos // Ya no es necesario calcularlos Void dibujar_circulo(void) { glBegin(GL_POLYGON) for(i=0;i<1000;i++) glVertex2f(coordenada[i][0], coordenada[i][1]); glEnd(); } Se puede hacer las pruebas necesarias incrementando la variable i; observe que ahora slo se acceder a la tabla de datos (al arreglo) cada vez de que desee renderizar el crculo, y no ser necesario calcular las coordenadas como era el caso anterior. Esto es en esencia, cuando se pretende usar una Lista de Visualizacin, obviamente bajo otro esquema de trabajo. Para hacer uso de una Lista de Visualizacin, debemos utilizar la funcin: glNewList(miLista, parametroLista); /* mas codigo */ glEndList();

Mg. Johnny R. Avendao Q.

Pag. No. 2

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P. Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

Donde: miLista: es un entero que sirve para indexar una o ms listas, esta identificacin ser nica. parametroLista: puede ser: GL_COMPILE: que le indica a OpenGL que solamente compile y almacene la lista. GL_COMPILE_AND_EXECUTE: le indica a OpenGL que tiene que compilar, almacenar y ejecutar de una vez. Todo el cdigo que se encuentra entre estas dos rdenes pasa a ser parte de la lista definida por glNewList mencionada lneas arriba. Ahora cada vez que necesitemos esta lista, la invocaremos o llamaremos con el comando: glCallList(miLista); A continuacin veamos la respectiva codificacin usando una lista de visualizacin para el ejemplo anterior del crculo: #define miListaCirculo 1 void construye_circulo(Glfloat radio) { Glint I; Glfloat x,y; glNewList(miListaCirculo,GL_COMPILE); glBegin(GL_POLYGON) for(i=0;i<1000;i++){ x=radio*cos(i*2*pi/1000); y=radio*sin(i*2*pi/1000); glVertex2f(x,y); } glEnd(); glEndList(); } Nuestro ejemplo es muy modesto pero trata de ser lo ms claro y didctico posible; probaremos una de sus tantas ventajas al implementar el taller de esta clase. Si usted precisa de trabajar con mltiples listas, estas pueden ser indexadas o tambin se puede usar listas de visualizacin jerrquicas, para ello se sugiere consultar el texto OpenGL Programming Guide The Red Book. Por ejemplo, a continuacin se muestra un cdigo empleando listas de visualizacin, en la cual se renderiza una lista llamando a otras para mostrar un objeto mayor: glNewList(listIndex,GL_COMPILE); glCallList(timon); glCallList(asiento); glTranslatef(1.0,0.0,0.0); glCallList(rueda); glTranslatef(3.0,0.0,0.0); glCallList(rueda); glEndList();

Mg. Johnny R. Avendao Q.

Pag. No. 3

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P. Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

El siguiente ejemplo muestra de manera simple cmo construir un polgono (triangulo) en funcin de sus vrtices: glNewList(1,GL_COMPILE); glVertex3f(v1); glEndList(); glNewList(2,GL_COMPILE); glVertex3f(v2); glEndList(); glNewList(3,GL_COMPILE); glVertex3f(v3); glEndList(); glNewList(4,GL_COMPILE); glBegin(GL_POLYGON); glCallList(1); glCallList(2); glCallList(3); glEnd(); glEndList();

2. PROGRAMA EJEMPLO CON OPENGL Implemente un programa sobre el Laboratorio # 03 y el Laboratorio # 05 (transformaciones geomtricas y mens jerrquicos), en esta implementacin el usuario podr escoger desde el men desplegable: 1. Un toroide (ver final de la gua), diseado sin listas de visualizacin. 2. Un toroide, diseado con Listas de Visualizacin. 3. Un toroide, empleando glut. Sobre cada tem deber agregar el respectivo submen para modificar el nmero de lados que lados con se aproxima la circunferencia de radio menor y mayor. Adems de controlar las rotaciones con respecto a los 3 ejes coordenados sobre cada toroide. Con esto, usted tendr una idea del potencial de esta tcnica (listas de visualizacin) para sus posteriores desarrollos de aplicaciones ms complejas. Para este efecto, obtuve una razn de 1.75 mas rpido usando listas de visualizacin, sobre el cdigo usual para completar un giro sobre uno de los ejes coordenados, pero recuerde que esto tambin depende del performance de su PC.
Figura No. 1. Representacin almbrica del toro

Recuerde que las ecuaciones del Toro (vase la figura anexa) son como sigue:

x = R cos( ) r cos ) + ( cos( )R > r , y = R sen ) r cos ) ( ) ( + ( sen z = R sen ) (

Mg. Johnny R. Avendao Q.

Pag. No. 4

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P. Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

Donde

y pertenecen al intervalo [0,2]

En la figura N 1 se muestra el toroide, que no es ms que un objeto tridimensional parecido a la cmara de aire que son empleadas en el interior de los neumticos de los automviles. En la figura N 2 nos sugiere, lo cual es cierto, que el toroide (o Toro) es una superficie y no un volumen; as las ecuaciones mostradas arriba, describen cualquier punto sobre la superficie del Toro. A continuacin, en la figura N 3 se muestra Figura No. 2. El toroide es una (los resultados de un programa basado en superficie cerrada OpenGL) el toro representado mediante un mallado poligonal de 7 lados para cada arco en la figura adyacente a la izquierda, y 20 lados para la figura adyacente a la derecha:

Figura No. 3. El toroide con 7 lados y con 20 lados respectivamente

El Toroide (texto extrado de Wikipedia): Un toro es la superficie de revolucin engendrada por una circunferencia que gira alrededor de una recta fija de su plano, que no la corta. La palabra toro proviene del vocablo en latn torus, el cual en castellano significa "bulto", ya sea "volumen o tamao de una cosa" o "elevacin de una superficie causada por una protuberancia". Un toro slido (vollringe) es un objeto tridimensional construido 2 1 mediante el producto cartesiano de un disco y un crculo: D xS . El toro genera un hueco en su interior, apropiando la forma semejante a un neumtico recargado, o a una dona o rosquilla.

Mg. Johnny R. Avendao Q.

Pag. No. 5

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P. Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

3. EJERCICIOS PROPUESTOS Ejercicio 01: Emplee listas de visualizacin y mens jerrquicos para agregar o quitar uno o ms toroides de una misma ventana grafica, adems podr modificar los colores desde el men desplegable. La ubicacin geomtrica ser escogida o indicada en el programa segn sea su criterio. Ejercicio 02: Emplee listas de visualizacin para definir los objetos en forma de pirmides y cubos, estas pirmides y cubos tendran sus propias caractersticas que se definirn en los siguientes talleres. Adems emplee segn su criterio la elaboracin de otras construcciones en funcin de las anteriores. As, empleando mens jerrquicos Usted podr activar o desactivar tales objetos de la escena, la cual tendr como base un plano (que har la vez de terreno), lo que se quiere es simular un centro arqueolgico. Anexo: Cdigo propuesto por D. Shreiner. Copyright (c) 1993 - 1997, Silicon Graphics, Inc. static void torus(int numc, int numt) { int i, j, k; double s, t, x, y, z, twopi; twopi = 2 * PI_; for (i = 0; i < numc; i++) { glBegin(GL_QUAD_STRIP); for (j = 0; j <= numt; j++) { for (k = 1; k >= 0; k--) { s = (i + k) % numc + 0.5; t = j % numt; x = (1+.1*cos(s*twopi/numc))*cos(t*twopi/numt); y = (1+.1*cos(s*twopi/numc))*sin(t*twopi/numt); z = .1 * sin(s * twopi / numc); glVertex3f(x, y, z); } } glEnd(); } } Ejercicio 03: Disee una aplicacin empleando exclusivamente listas de visualizacin para el siguiente conjunto de ruedas en la figura adjunta. Las 3 ruedas estn girando sobre los puntos A, B y C en el sentido anti horario. La rueda en el punto C tiene la mitad del dimetro de las otras ruedas restantes. C B La faja (de color rojo) tiene una longitud constante, que Ud. puede fijar segn su conveniencia. Debe considerar las velocidades angulares para cada rueda de tal forma que los giros sean coherentes. Estas tres ruedas sern diseadas empleando toroides (en 3D), de preferencia de colores diferentes.
Mg. Johnny R. Avendao Q. Pag. No. 6

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P. Ingeniera de Sistemas e Informtica Departamento Acadmico de Ciencias de la Computacin Laboratorio de Computacin Grafica 2011 II

Listas de Visualizacin en OpenGL

Es opcional el uso de mens jerrquicos para activar las propiedades de este sistema de ruedas. Considere las medidas apropiadas segn su buen criterio. Las ruedas sern representadas con un toroide, mientras que faja ser representada por una lnea gruesa. La representacin es 3D con alguna rotacin incluida (mnimo un eje). Ejercicio 04: Encapsule una curva de Bzier empleando Listas de Visualizacin. Ejercicio 05: Emplee Listas de Visualizacin para invocar la cpsula convexa as como desactivarla (haga uso de los mens jerrquicos segn su criterio), adems incorpore el algoritmo de Casteljau para disear la curva de Bzier. Tambin puede activar o desactivar el movimiento de los puntos de control con ayuda del mouse. 4. REFERENCIAS 1. Principles and Practice (Second Edition).Foley J. D., A.van Dam, S.K. Feiner and J.F. Hughes Computer Graphics. Addison-Wesley. 1990. 2. OpenGL Superbible. R. Wright and M. Sweet. Waite Group, Inc 1999. 3. The OpenGL Utility Toolkit (GLUT) Programming Interface (API Version 3). Mark J. Kilgard, Silicon Graphics, Inc 1996 4. The OpenGL Graphics System: A Specification (Version 1.2). Mark Segal & Kurt Akeley. Silicon Graphics, Inc 1998. 5. Wikipedia, la enciclopedia libre. (enlace) http://es.wikipedia.org/wiki/

Mg. Johnny R. Avendao Q.

Pag. No. 7

Вам также может понравиться