Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Autores:
Pedro Cano
Antonio Lpez
Domingo Martn
Francisco J. Melero
Carlos Urea
Curso 2014/15
La Informtica Grfica
La gran ventaja de los grficos por ordenador, la posibilidad de crear mundos virtuales
sin ningn tipo de lmite, excepto los propios de las capacidades humanas, es a su vez su
gran inconveniente, ya que es necesario crear toda una serie de modelos o representaciones
de todas las cosas que se pretenden obtener que sean tratables por el ordenador.
As, es necesario crear modelos de los objetos, de la cmara, de la interaccin de la luz
(virtual) con los objetos, del movimiento, etc. A pesar de la dificultad y complejidad, los
resultados obtenidos suelen compensar el esfuerzo.
Ese es el objetivo de estas prcticas: convertir la generacin de grficos mediante orde-
nador en una tarea satisfactoria, en el sentido de que sea algo que se hace con ganas.
Con todo, hemos intentado que la dificultad vaya apareciendo de una forma gradual y
natural. Siguiendo una estructura incremental, en la cual cada prctica se basar en la reali-
zada anteriormente, planteamos partir desde la primera prctica, que servir para tomar un
contacto inicial, y terminar generando un sistema de partculas con animacin y deteccin
de colisiones.
Esperamos que las prcticas propuestas alcancen los objetivos y que sirvan para ensear
los conceptos bsicos de la Informtica Grfica, y si puede ser entreteniendo, mejor.
ndice general
ndice General 5
2. Modelos Poligonales 11
2.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Evaluacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4. Extensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5. Duracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3. Modelos jerrquicos 17
3.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.1. Reutilizacin de elementos . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2. Resultados entregables . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3. Evaluacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4. Extensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5. Duracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.7. Algunos ejemplos de modelos jerrquicos . . . . . . . . . . . . . . . . . . 21
c
6 NDICE GENERAL
c
Prctica 1
Introduccin. Visualizacin de
modelos PLY
1.1. Objetivos
Con esta prctica se quiere que el alumno aprenda:
1.2. Desarrollo
Para el desarrollo de esta prctica se entrega el esqueleto de una aplicacin grfica
basada en eventos, mediante glut, y con la parte grfica realizada por OpenGL. Para facilitar
su uso, la aplicacin permite abrir una ventana, mostrar unos ejes y mover una cmara
bsica. As mismo, se incluye el cdigo bsico para dibujar los vrtices de un cubo unidad.
Se entrega tambin el cdigo de un lector bsicos de ficheros PLY compuestos nicamente
por tringulos.
El alumno estudiar el cdigo. En particular debe fijarse en el cdigo que permite dibu-
jar los 8 vrtices. Se debe comprobar la rigidez que impone el definir el modelo mediante
cdigo (qu pasa si en vez de un cubo es un dodecaedro?). Se debe entender que la solu-
cin pasa por independizar la visualizacin de la definicin de modelo. Reflexionar sobre
esto pues es un concepto muy importante.
El alumno debe encontrar una solucin que permita una mayor flexibilidad. Una vez
entendido e implementado, se har uso del cdigo que permite leer un fichero PLY, visua-
c
8 Introduccin. Visualizacin de modelos PLY
lizndolo. Es probable que se vea la necesidad de crear estructuras de datos que faciliten el
manejo de los modelos y sus datos. Por ejemplo, en vez de tener 3 flotantes para definir las
coordenadas de un vrtice, utilizar una estructura que los convierta en una entidad (ver el
cdigo vertex.h como ejemplo).
Finalmente se crear el cdigo que permita visualizar el modelo con los siguiente mo-
dos:
Alambre
Slido
Ajedrez
Para poder visualizar en modo alambre (tambin para el modo slido y ajedrz) lo que
se hace es mandar a OpenGL como primitiva los tringulos, GL_TRIANGLES, y cambiar
la forma en la que se visualiza el mismo mediante la instruccin glPolygonMode, per-
mitiendo el dibujar los vrtices, las aristas o la parte slida.
Para el modo ajedrez basta con dibujar en modo slido pero cambiando alternativamente
el color de relleno.
1.3. Evaluacin
Para evaluacin de la prctica se tendrn en cuentan los siguientes items que debern
cumplirse (sobre 10):
Creacin del cdigo que permite visualizar un vector de flotantes en modo puntos
(2pt)
Creacin del cdigo que permite visualizar en los modos alambre, slido y ajedrez.
(4pt)
Creacin de los procedimientos para visualizar en los distintos modos.
1.4. Extensiones
1.5. Duracin
La prctica se desarrollar en 2 sesiones
c
1.6 Bibliografa 9
1.6. Bibliografa
Mark Segal y Kurt Akeley;The OpenGL Graphics System: A Specification (version
4.1); http://www.opengl.org/
c
10 Introduccin. Visualizacin de modelos PLY
c
Prctica 2
Modelos Poligonales
2.1. Objetivos
Aprender a:
Modelar objetos slidos poligonales mediante tcnicas sencillas. En este caso se usar
la tcnica de modelado por revolucin de un perfil alrededor de un eje de rotacin
2.2. Desarrollo
En primer lugar, se ha de crear un cdigo que a partir del conjunto de puntos que repre-
senten un perfil respecto a un plano principal (X = 0, Y = 0, Z = 0), de un parmetro que
indique el nmero de lados longitudinales del objeto a generar por revolucin y de un eje
de rotacin, calcule el conjunto de vrtices y el conjunto el caras que representan el slido
obtenido.
siendo pi (xi , yi , 0) con i = 1, ...M los puntos que definen el perfil (ver figura 2.1).
Q j = Q1 RY ( j ), con j = 1, . . . , N
c
12 Modelos Poligonales
Las caras longitudinales del slido (tringulos) se crean a partir de los vrtices de dos
perfiles consecutivos Q j y Q j+1 . Tomando dos puntos adyacentes en cada uno de los
dos perfiles Q j y Q j+1 y estando dichos puntos a la misma altura, se pueden crear
dos tringulos. En la figura 2.2(a) se muestran los tringulos as obtenidos solamente
para un lado longitudinal para una mejor visualizacin. Los vrtices de los tringulos
tienen que estar ordenados en el sentido contrario a las agujas del reloj.
A continuacin creamos las tapas del slido tanto inferior como superior (ver figura
2.2(b)). Para ello se han de aadir dos puntos al vector de vrtices que se obtienen por
la proyeccin sobre el eje de rotacin del primer y ltimo punto del perfil inicial. Estos
dos vrtices sern compartidos por todas las caras de las tapas superior e inferior.
Todas las caras, tanto las longitudinales como las tapas superior e inferior, se almace-
nan en la estructura de datos creada para las caras en la prctica anterior.
ply
format ascii 1.0
c
2.2 Desarrollo 13
(a) (b)
Figura 2.2: Caras del slido a construir: (a) logitudinales (solo un lado es mostrado) y (b)
incluyendo las tapas superior e inferior.
Figura 2.3: Slido generado por revolucin con distintos modos de visualizacin.
c
14 Modelos Poligonales
element vertex 11
property float32 x
property float32 y
property float32 z
end_header
1.0 -1.4 0.0
1.0 -1.1 0.0
0.5 -0.7 0.0
0.4 -0.4 0.0
0.4 0.5 0.0
0.5 0.6 0.0
0.3 0.6 0.0
0.5 0.8 0.0
0.55 1.0 0.0
0.5 1.2 0.0
0.3 1.4 0.0
A partir de la lista de vrtices y de caras del objeto slido, se calculan los vectores
normales de todas las caras. Dada una cara triangular constituida por vrtices A, B y
C ordenados en el sentido contrario a las agujas del reloj, si se definen dos vectores
~ y BC
AB ~ un vector normal al plano que contiene a la cara ~N se obtiene mediante la
expresin ~N = AB~ BC,
~ donde representa el producto vectorial de dos vectores.
Un vector normal a una cara no tiene porque ser un vector normalizado o unitario.
As, los vectores normales ~N, que han sido calculados previamente, tienen que ser
normalizados.
Se ha de crear una estructura de datos para almacenar los vectores normales a las
caras.
Los vectores normales a los vrtices se calculan a partir de la lista de vectores norma-
les a las caras que se obtiene en el paso anterior. El vector normal a un vrtice v, que
denotamos por N ~ v se obtiene como el promedio normalizado de los vectores normales
de las caras que comparten dicho vrtice:
n ~
~ v = i=1 Ni
N (2.1)
~ i|
| ni=1 N
c
2.3 Evaluacin 15
2.3. Evaluacin
La evaluacin de la prctica, sobre 10 puntos, se har del modo siguiente:
2.4. Extensiones
Se propone como extensin modelar slidos por barrido a partir de un contorno cerrado.
2.5. Duracin
La prctica se desarrollar en 3 sesiones
2.6. Bibliografa
Mark Segal y Kurt Akeley; The OpenGL Graphics System: A Specification (version
4.1); http://www.opengl.org/
c
16 Modelos Poligonales
c
Prctica 3
Modelos jerrquicos
3.1. Objetivos
Con esta prctica el alumno aprender a:
3.2. Desarrollo
Para realizar un modelo jerrquico es importante seguir un proceso sistemtico, tal y
como se ha estudiado en teora, poniendo especial inters en la definicin correcta de los
grados de libertad que presente el modelo.
Para modificar los parmetros asociados a los grados de libertad del modelo utilizaremos
el teclado. Para ello tendremos que escribir cdigo para modificar los parmetros como
respuesta a la pulsacin de teclas.
Las acciones a realizar en esta prctica son:
1. Disear un modelo jerrquico con al menos 3 grados de libertad distintos (al menos
deben aparecer giros y desplazamientos). Puedes tomar como ejemplo el diseo de
una gra semejante a las del ejemplo (ver figura 3.1). En el ejemplo, estas gruas tienen
al menos tres grados de libertad: ngulo de giro de la torre, giro del brazo y altura del
gancho.
2. Disear el grafo del modelo jerrquico del objeto diseado, determinando el tamao
de las piezas y las transformaciones geomtricas a aplicar (tendrs que entregar el
grafo del modelo en papel, o en formato electrnico: pdf, jpeg, etc, cuando entregues
la prctica).
c
18 Modelos jerrquicos
5. Crear el codigo necesario para visualizar el modelo jerrquico utilizando los valores
de los parmetros del modelo almacenado en la estructura de datos. El alumno podra
utilizar las funciones de visualizacin implementadas en las anteriores practicas que
permiten visualizar los modelos con las distintas tcnicas implementadas.
6. Incorporar cdigo para cambiar los parmetros modificables del modelo y para con-
trolar su movimiento. Aadir la ejecucin de dicho cdigo en las funciones de control
de pulsacin de teclas para modificar el modelo de forma interactiva. Hay que tener
presente los lmites de cada movimiento.
c
3.3 Evaluacin 19
Tecla Z/z: modifica primer grado de libertad del modelo jerrquico (aumenta/dismi-
nuye)
Tecla X/x: modifica segundo grado de libertad del modelo jerrquico (aumenta/dis-
minuye)
Tecla C/c: modifica tercer grado de libertad del modelo jerrquico (aumenta/dismi-
nuye)
3.3. Evaluacin
La evaluacin de la prctica, sobre 10 puntos, se har del modo siguiente:
Diseo del modelo jerrquico y del grafo correspondiente que muestre las relaciones
entre los elementos (2 puntos)
Creacin del cdigo para poder visualizar de forma correcta el modelo (1 punto)
c
20 Modelos jerrquicos
Control interactivo del cambio de los valores que definen los grados de libertad del
modelo (3 puntos)
3.4. Extensiones
Como extensin optativa se propone la incorporacin de animacin automtica de los
componentes del modelo. Para ello:
Aade al modelo lo que estimes necesario para almacenar una velocidad de movi-
miento para cada uno de los parmetros.
Ahora puedes animar el modelo haciendo que el valor del parmetro que modifica
cada grado de libertad se modifique segun su velocidad.
Para animar el modelo utiliza una funcin de fondo que se ejecute de forma indefinida
en el ciclo de ejecucin de la aplicacin OpenGL, en la que puedes realizar la actualizacin
de cada parmetro en funcin de su velocidad. La funcin de fondo estr creada en el
fichero principal y se activa desde el programa principal con:
glutIdleFunc ( idle );
siendo void idle() el nombre de la funcin que se llama para modificar los parme-
tros. Esta funcin de animacin debe cambiar los parmetros del modelo en funcin de la
velocidad y para que se redibuje, llamar a:
glutPostRedisplay ( ) ;
Cambia finalmente el procedimiento de entrada para que desde el teclado se pueda cam-
biar tambin las velocidades de modificacin de los grados de libertad:
3.5. Duracin
Esta tercera prctica se desarrollar en 3 sesiones.
c
3.6 Bibliografa 21
3.6. Bibliografa
Mark Segal y Kurt Akeley; The OpenGL Graphics System: A Specification (version
4.1); http://www.opengl.org/
c
22 Modelos jerrquicos
c
Figura 3.3: Ejemplos de posibles modelos jerrquicos.
24 Modelos jerrquicos
c
Prctica 4
4.1. Objetivos
Con esta prctica el alumno aprender a:
4.2. Desarrollo
En esta prctica incorporaremos a las mallas de tringulos informacin de las coorde-
nadas de textura, as como crearemos estructuras de datos o variables globales con los pa-
rmetros de las fuentes de luz, los materiales y las texturas, para proceder a la visualizacin
de objetos con distintos modelos de aspecto. El cdigo descrito aqu debe aadirse al cdigo
existente para las prcticas desde la 1 hasta la 3, sin eliminar nada de la funcionalidad ya
implementada.
c
26 Materiales, fuentes de luz y texturas
Se crearn el cdigo para dos nuevos modos de visualizacin (modos con iluminacin),
adicionales a los que se indican en el guin de la prctica 1. En ambos modos (y para las ma-
llas que dispongan de ellas) se enviarn junto con cada vrtice sus coordenadas de textura,
pero no se enviarn los colores de los vrtices ni de los tringulos. Respecto a las norma-
les, se deben usar las tablas calculadas con el mismo cdigo de las prcticas anteriores. Se
procede segn el modo:
Una vez definidas las tablas de coordenadas de textura, se crear una nueva versin mo-
dificada del cdigo o funcin que crea objetos por revolucin de la prctica 3. En los casos
que as se especifique, dicho cdigo nuevo incluir la creacin de la tabla de coordenadas
de textura.
Supongamos que el el perfil de partida tiene M vrtices, numerados comenzando en
cero. Las posiciones de dichos vrtices sern: {p0 , p1 , . . . , pM1 }. Si suponemos que hay
N copias del perfil, y que en cada copia hay M vrtices, entonces el j-simo vrtice en
la i-sima copia del perfil ser qi, j , con i [0 . . . N 1] y j [0 . . . M 1] y tendr unas
coordenadas de textura (si ,t j ) (dos valores reales entre 0 y 1. La coordenada S (coordenada
X en el espacio de la textura) es comn a todos los vrtices en una copia del perfil.
El valor de si es la coordenada X en el espacio de la textura, y est entre 0 y 1. Se obtiene
como un valor proporcional a i, haciendo si = i/(N 1) (la divisin es real), de forma que
si va desde 0 en el primer perfil hasta 1 en el ltimo de ellos.
El valor de t j es la coordenada Y en el espacio de la textura, y tambin est entre 0 y
1. Su valor es proporcional a la distancia d j (medida a lo largo del perfil), entre el primer
vrtice del mismo (vrtice 0), y dicho vrtice j -simo. Las distancia se definen como sigue:
d0 = 0 y d j+1 = d j + kp j+1 p j k, y se pueden calcular y almacenar en un vector temporal
durante la creacin de la malla. Conocidas las distancias, la coordenada Y de textura (t j ) se
obtiene como t j = d j /dM1
Hay que tener en cuenta que en este caso, la ltima copia del perfil (la copia N 1)
es la que corresponde a una rotacin de 2 radianes o 360o . Esta copia debe ser distinta
de la primera copia, ya que, si bien sus vrtices coinciden con aquella, las coordenadas de
textura no lo hacen (en concreto la coordenada S o X), debido a que en la primera copia
necesariamente dicha coordenada es s0 = 0 y en la ltima es sN1 = 1. Este es un ejemplo
de duplicacin de vrtices debido a las coordenadas de textura.
c
4.2 Desarrollo 27
El siguiente paso ser disear e implementar las fuentes de luz de la escena (al menos
dos). Al menos una de las dos fuentes ser direccional y tendr su vector de direccin
definido en coordenadas esfricas por dos ngulos y , donde es el ngulo de rotacin
en torno al eje X (latitud), y es la rotacin en torno al eje Y (longitud). Cuando y
son ambas 0, la direccin coincide con la rama positiva del eje Z. el vector de direccin de
la luz se considerar fijado al sistema de referencia de la camara (la luz se "mueveon el
observador).
Para implementar las fuentes se definen en el programa las variables globales, estructu-
ras o instancias de clase que almacenan los parmetros de cada una de las fuentes de luz que
se planean usar. Para cada fuente de luz, se debe guardar: su color Si , su tipo (un valor lgico
que indique si es direccional o posicional), su posicin (para las fuentes posicionales), y su
direccin en coordenadas esfricas (para las direccionales). Al menos para la fuente dada
en coordenadas esfericas, se guardarn asimismo los valores y
Para cada fuente de luz, se definir una funcin (o habr mtodo de clase comn) que
se encarge de activarla. Aqu activar una fuente significa que en OpenGL se habilite su uso
y que se configuran sus parmetros en funcin del valor actual de las variables globales que
describen dicha fuente.
c
28 Materiales, fuentes de luz y texturas
Cabeceras:
jpg_imagen.cpp
jpg_memsrc.cpp
jpg_readwrite.cpp
Este cdigo usa la librera libjpeg, que debe enlazarse tambien (con el switch -ljpeg
en el enlazador/compilador de GNU). Esta librera puede instalarse en cualquier distribu-
cin de linux usando paquetes tipo rpm o o debian. Al hacer la instalacin se debe usar la
versin de desarrollo (incluye las cabeceras).
4.2.5. Materiales.
c
4.2 Desarrollo 29
Para los materiales que lleven asociada una textura, se llamar a la funcin o mtodo pa-
ra activar dicha textura, descrita anteriormente. Si el material no lleva textura, se deben
deshabilitar las texturas en OpenGL.
El ltimo paso ser definir la funcin principal de visualizacin de la escena para esta
prctica 4. La primera vez que se invoque, se crearn en memoria las variables o instancia
de clase que representan los objetos geomtricos, las fuentes de luz, y los materiales y
texturas de la escena. La escena estar compuesta de varios objetos (ver figura 4.1), en
concreto los siguientes:
Objeto lata (ver figura 4.2). Este objeto est compuesto de tres sub-objetos. Cada uno
de ellos es una malla distinta, obtenida por revolucin de un perfil almacenado en un
archivo ply. En concreto:
c
30 Materiales, fuentes de luz y texturas
Objetos pen: son tres objetos obtenidos por revolucin, usando el mismo perfil de
la prctica 2. Los tres objetos comparten la misma malla, solo que instanciada tres
veces con distinta transformacin y material en cada caso:
Figura 4.2: Objeto lata obtenido con tres mallas creadas por revolucin partir de tres
perfiles en archivos ply (izquierda). La malla correspondiente al cuerpo incorpora la
textura de la imagen de la derecha.
4.2.7. Implementacin
Para esta prctica se pueden seguir bsicamente dos estrategias de diseo alternativas:
Asociar cada textura, material o fuente de luz con una funcin C/C++ especfica que
se encarga de activarla (la primera vez que se intente activar una textura, se cargar
en memoria).
Asociar cada textura, material o fuente de luz con una instancia de una clase o con una
variable struct que contiene los parmetros que la definen. Se deben definir clases
c
4.2 Desarrollo 31
Figura 4.3: Vista ampliada de las tapas metlicas inferior (izquiera) y superior (derecha)
de la lata (ambas sin textura)
Figura 4.4: Vista del objeto tipo pen (izquierda) y la textura de madera que se le aplica
(derecha). La textura se aplica usando generacin automtica de coordenadas de textura (la
textura se proyecta en el plano XY).
o tipos struct para cada tipo de elemento. Para la activacin, se usar un mtodo
de clase o bien una funcin que acepta como parmetro un puntero a la struct.
c
32 Materiales, fuentes de luz y texturas
de una de las fuentes de luz (la fuente direccional expresada en coordenadas polares con
dos ngulos y , segn se describe en la seccin 4.2.3). Las teclas son:
4.3. Evaluacin
La evaluacin de la prctica, sobre 10 puntos, se har del modo siguiente:
c
4.4 Extensiones 33
4.4. Extensiones
Como extensin, se propone incorporar texturas y fuentes de luz al objeto jerrquico
creado para la prctica 3. A dicho objeto se le pueden aplicar distintas texturas y/o materiales
a las distintas partes de forma que se incremente su grado de realismo, as como definir
fuentes de luz.
Para llevar a cabo esta tarea, hay que tener en cuenta que el cdigo que visualiza las
mallas debe enviar las normales, y en los casos que corresponda las coordenadas de textura.
Si se usa alguna librera para visualizar las mallas (como glu, glut u otras), debemos de
asegurarnos que la librera enva normales y cc.tt., si esto no es as habr que considerar otra
librera o escribir el cdigo de visualizacin de esas mallas.
4.5. Duracin
Esta tercera prctica se desarrollar en 3 sesiones.
4.6. Bibliografa
Mark Segal y Kurt Akeley; The OpenGL Graphics System: A Specification (version
4.1); http://www.opengl.org/