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

Universidad Politcnica de Catalua

Departamento de Lenguajes y Sistemas Informticos


Mster en Computacin

Tesis de Mster
Visualizacin interactiva de
entornos muy complejos

Estudiante: Javier Bo Gustems


Director: Pere Brunet Crosa
Ponente:

Fecha: 25/06/07

ndice general
1. Introduccin

2. Trabajo previo

2.1.

Visualizacin de escenas complejas

Impostores . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.1.

. . . . . . . . . . . . . . .

2.1.2.

. . . . . . . . . . . . . . . . . . . . . . .

2.1.3.
2.2.

Relief textures

Mallas texturadas . . . . . . . . . . . . . . . . . . . . .

Visualizacin de escenas gigantes

Far voxels . . . . . .
Layered Point Clouds
Quick VDR . . . . .

2.2.1.

11

. . . . . . . . . . . . . . . . . . .

11

. . . . . . . . . . . . . . . . . . .

12

. . . . . . . . . . . . . . . . . . .

14

Comparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

2.2.2.
2.2.3.
2.3.

. . . . . . . . . . . . . . . .

3. ORI: Omni-directional Relief Impostors

17

3.1.

Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.2.

Construccin

19

3.3.

Seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

3.4.

Visualizacin

. . . . . . . . . . . . . . . . . . . . . . . . . . .

23

3.5.

PLT:

. . . . . . . . . . . . . . . .

25

. . . . . . . . . . . . . . . . . . . . . . . . . . .

Projected Length Threshold

4. HORI: Hierarchical ORI

29

4.1.

Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

4.2.

Generacin

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

. . . . . . . . . . . . . . . . . . . . . . . . .

31

. . . . . . . . . . . . . . . . . . . . . . . . .

32

4.2.1.
4.2.2.

Top-down
Bottom-up

5. Algoritmo de navegacin dependiente de la vista

33

6. Resultados

37

7. Conclusiones

45
i

A. OpenGL y GPUs

47

A.1. Introduccin a OpenGL

. . . . . . . . . . . . . . . . . . . . .

47

A.1.1. Funcionamiento y esquema bsico de visualizacin . . .

48

A.1.2. Primitivas grcas

. . . . . . . . . . . . . . . . . . . .

49

A.1.3. Transformaciones geomtricas con OpenGL . . . . . . .

50

A.2. Programacin de la GPU . . . . . . . . . . . . . . . . . . . . .

51

A.2.1.

Shaders

. . . . . . . . . . . . . . . . . . . . . . . . . .

B. Fragment shader

52

57

ii

ndice de guras
2.1.

Concepto fundamental de los LODs . . . . . . . . . . . . . . .

2.2.

Limitaciones de las representaciones basadas en imgenes . . .

2.3.

Uso de impostores . . . . . . . . . . . . . . . . . . . . . . . . .

2.4.

Ejemplo de

2.5.

Marco de trabajo de las mallas texturadas

2.6.

Esquema del algoritmo

relief texture

. . . . . . . . . . . . . . . . . . . . .

10

. . . . . . . . . . .

11

. . . . . . . .

12

2.8.

Far voxels . . . . . . . .
Descripcin del algoritmo Layered Point Clouds
Algoritmo Quick VDR . . . . . . . . . . . . . .

3.1.

Esquema de funcionamiento de los ORI . . . . . . . . . . . . .

18

3.2.

Estrategias de construccin de los ORI

21

3.3.

Impacto del criterio de seleccin . . . . . . . . . . . . . . . . .

23

3.4.

Deteccin de

. . . . . . . . . . . .

24

3.5.

Estrategias en el clculo de la profundidad . . . . . . . . . . .

26

4.1.

Exploracin interactiva utilizando HORI

. . . . . . . . . . . .

30

5.1.

Vista esquemtica de una jerarqua de ORI . . . . . . . . . . .

33

5.2.

Clculo del nivel requerido . . . . . . . . . . . . . . . . . . . .

35

6.1.

Modelo del ngel

6.2.

Modelo de puntos del Malecn de la Habana . . . . . . . . . .

39

6.3.

Subdivisin del espacio en el modelo

. . . . . . . . . . .

42

2.7.

solid artifacts

Lucy

en el

. . . . . . . .

13

. . . . . . . .

14

. . . . . . . . . . . . .

shader

. . . . . . . . . . . . . . . . . . . . . .

Lucy
Lucy
Trayectora en el modelo Lucy

Lucy

38

6.4.

Trayectora en el modelo

(1) . . . . . . . . . . . . . . . .

42

6.5.

Trayectora en el modelo

(2) . . . . . . . . . . . . . . . .

43

(3) . . . . . . . . . . . . . . . .

43

. . . . . . . . . . . . . . . . . . . . . . .

51

6.6.
A.1.
A.2.

Pipeline
Pipeline

de OpenGL

de las tarjetas grcas actuales

iii

. . . . . . . . . . . .

54

iv

Captulo 1
Introduccin
La visualizacin interactiva de modelos tridimensionales es una rea de
investigacin de gran inters ya que tiene aplicaciones en muchas reas tales
como videojuegos, simuladores de vuelo o de conduccin, realidad virtual,
visualizacin de modelos arquitectnicos y diseo asistido por ordenador.
Durante la exploracin de un modelo 3D, deseamos una animacin uida
con el objetivo de alcanzar una inmersin convincente. El desafo principal de
los sistemas de visualizacin interactivos es proporcionar

framerates (nmero

de imgenes por segundo) adecuados para modelos 3D muy complejos. Las


prestaciones de las placas grcas se han incrementado drsticamente los ltimos aos, permitiendo la visualizacin de varios millones de primitivas por
segundo. Adems, las GPUs han aumentado su grado de programabilidad,
lo que permite alcanzar una visualizacin ms realista. Por otro lado, debido
al continuo deseo de alcanzar ms realismo y detalle, la complejidad de los
modelos es cada vez mayor. Las escenas son a menudo demasiado complejas
para ser visualizadas en tiempo real. Las tcnicas de aceleracin de este tipo
de escenas han sido un tema de inters en los grcos por ordenador en los
ltimos aos y parece que lo seguir siendo en un futuro prximo.
Este proyecto pretende ampliar las tcnicas utilizadas hasta ahora para
la visualizacin interactiva de escenas muy complejas presentando una nueva representacin para este tipo de escenas, llamada

HORI: Hierarchical

Omni-directional Relief Impostors , junto con un algoritmo que permi-

ta visualizar dicha representacin. Los objetivos principales del proyecto se


denen a continuacin:
Construccin de modelos jerrquicos de escenas muy complejas. Los
modelos se obtendrn subdividiendo el espacio mediante rboles octales

octrees ), que incorporarn en sus nodos texturas de relieve.

Estudiar la generacin de los modelos a partir de diferentes modelos


de entrada tales como las mallas de tringulos, modelos de volumen
y modelos de nubes de puntos. Se implementar un algoritmo para
algunos de estos modelos.
Empleo de modelos ORI (
en los nodos del

octree.

Omni-directional Relief Impostors ) [ABB+ 07]

Implementacin de un algoritmo de navegacin interactivo con recorrido del rbol dependiente de la vista (

view-dependent ), con aprovecha-

miento de las prestaciones de las placas grcas actuales.

Captulo 2
Trabajo previo
Se han propuesto muchos algoritmos para la aceleracin del proceso de
visualizacin, siguiendo una de las siguiente estrategias:
La complejidad del

funcionamiento de las placas grcas actuales

a menudo permite optimizaciones en el proceso de visualizacin. Eliminando los cuellos de botella es posible incrementar notablemente las
prestaciones.

clculos de visibilidad eliminan regiones invisibles de la escena


antes de ser envadas al hardware grco. Aunque proporciona una
Los

aceleracin considerable en algunos casos (interiores o escenas urbanas),


la geometra visible actual sobrepasa las capacidades del
Las

hardware.

tcnicas de simplicacin de la geometra tienen la ventaja en

el hecho de que las partes complejas de una escena que estn distantes
al observador, y por lo tanto tienen un tamao pequeo en pantalla,
contribuyen muy poco a la imagen nal. Como consecuencia, las representaciones simplicadas se utilizan para representar objetos distantes,
obtenindose as diferentes niveles de detalle (LODs). Esto reduce la
complejidad de la escena visible, pero desafortunadamente las tcnicas
de simplicacin no pueden ser aplicadas a cualquier parte de la escena.
El concepto fundamental de los LODs, resumido en la gura 2.1, es simple:
durante la visualizacin, utilizar una representacin menos detallada para los
objetos pequeos y/o distantes, y para las regiones con menos importancia
de la escena. Esta representacin menos detallada a menudo consiste en una
seleccin de varias versiones de los objetos de la escena, cada versin menos
detallada y que es posible visualizarla en un tiempo menor que la anterior.

Para una descripcin completa los niveles de detalle en grcos y sus aplica+
ciones consultar [LWC 02].

(a) Simplicacin del objeto, (b) creando niveles de detalle para


reducir el coste de visualizacin
Figura 2.1:

Para los casos en los que las tcnicas de simplicacin de la geometra no


pueden ser aplicadas, como por ejemplo la simplicacin de mltiples objetos a la vez conservando las caractersticas individuales de cada uno de ellos,
se utilizan representaciones basadas en el muestreo de la apariencia (tpicamente informacin sobre el color, obtenido a partir de la visualizacin de la
escena). Durante la visualizacin, estas representaciones se utilizan reemplazando la parte original de la escena (basada en geometra). Esto permite una
calidad visual similar, adems de mayor velocidad en el proceso de visualizacin ya que el tiempo de visualizacin depende del tamao en pantalla y
no de la complejidad geomtrica de la escena original. La ventaja respecto a
las tcnicas basadas en la simplicacin de la geometra es que el proceso de
generacin no necesita ninguna informacin de la estructura geomtrica de
la escena original. Debido a esto, las representaciones basadas en el muestreo

2. Trabajo previo
pueden ser aplicadas a un rango ms amplio de escenas (ver [JWP05] para
obtener una descripcin sobre el estado del arte).
Existen muchas representaciones basadas en el muestreo, cada una de
ellas se caracteriza por la cantidad y el tipo de informacin que almacenan.
Se denominan representaciones basadas en la imagen o en puntos (

image-

based o point-based ) dependiendo de los datos que almacenen y procesen. En


la literatura, las representaciones basadas en imagen para la aceleracin de
la visualizacin son conocidas como

impostores. Las imgenes aplicadas a


billboards o sprites ) se

modelos geomtricos simples como texturas (llamados

utilizan en muchos videojuegos desde hace muchos aos para visualizar rboles, suelo, fuego, personajes, artculos o imgenes estticas de fondo como
montaas o ciudades.
Para generar una representacin basada en la imagen de un objeto, es
necesario adquirir su apariencia, por ejemplo a travs de su estructura geomtrica. En la mayora de casos esto se hace visualizando el objeto desde un
nico punto de visin (llamado punto de referencia). La informacin adquirida se combina con la geometra con el propsito de posicionar la imagen en la
escena. En el caso ms simple, la parte de la escena se captura en una textura
y esta textura se mapea en un cuadriltero. La generacin puede ocurrir en
una etapa de preproceso (representacin esttica) o en tiempo de ejecucin
(representacin dinmica). Para evitar posibles errores en la visualizacin la
escena, la generacin de la representacin debe tener en cuenta los siguientes
aspectos (ver gura 2.2):
La resolucin del muestreo no debe ser mucho menor que la resolucin
de la imagen nal. De lo contrario, observaremos agujeros o una imagen pixelada destruyendo la ilusin ptica que pretendemos crear. Esto
signica que se debe mantener siempre una distancia mnima a la representacin original, en trminos de apariencia. Adems, la adquisicin
de la apariencia debe proporcionar un resultado similar comparado con
la visualizacin del objeto original.
Si el punto de vista se cambia pueden aparecer errores de orientacin

parallax ) cuando las partes de la escena ms prximas parecen moverse

comparado con las partes ms distantes de la escena. Este efecto se


puede reproducir en algunos casos aplicando la geometra adecuada.
Ntese que este efecto es mayor a medida que el punto de referencia
se aleja de la escena, lo que delimita la regin de visin en la que el
impostor puede ser visualizado con suciente precisin.

Los movimientos de la cmara pueden hacer aparecer nuevas partes de


la escena. Este fenmeno se conoce como desoclusin. Por supuesto,
es deseable que todas las partes de la escena visibles se incluyan en
el impostor. De otra forma, pueden aparecer errores tales como aguje-

cracks )

ros (

o efectos

rubber-sheet

(si el observador se sita entre dos

objetos, el espacio entre ellos se rellena mezclando el fondo con los objetos). Evitar este tipo de errores no es trivial y la mayora de algoritmos
existentes requieren un coste computacional muy elevado.
Para una integracin correcta en la escena, la frontera entre las representaciones basadas en imgenes y la geometra adyacente no debe
presentar errores. Esto es especialmente importante cuando los objetos
son representados mediante una mezcla de imgenes y geometra original. Adems, la visibilidad entre la escena original y la representacin
en imgenes tiene que poder resolverse.
Las partes dinmicas de una escena tienen que ser reproducidas por la
representaciones basadas en imgenes. Esto incluye modelos dinmicos
como los humanos o efectos de luz dinmicos.

Arriba-izquierda: escena original. Arriba-derecha: imagen pixelada debido al submuestreo. Abajo-izquierda: agujero (la representacin se
ha generado a la derecha del punto de vista actual). Abajo-derecha: errores
debido al parallax (las casas de la derecha deberan ser invisibles)
Figura 2.2:

2. Trabajo previo
2.1.

Visualizacin de escenas complejas

2.1.1. Impostores
Estas aproximaciones presentan mtodos para reemplazar objetos distantes en una escena (sobretodo, escenas urbanas) por una representacin
basada en imgenes. En [SDB97], se presenta una tcnica que realiza una
segmentacin dinmica de los datos, obtenindose una representacin local
tridimensional y un conjunto de impostores utilizados para representar objetos distantes. El modelo de segmentacin es especco para escenas urbanas
y explota las relaciones inherentes en una escena de este tipo. Introducen
una nueva estructura para representar impostores, derivada de los niveles de
detalle. Los impostores se combinan con geometra real para permitir grandes discontinuidades en las profundidades y efectos de

parallax,

y texturas

para una visualizacin rpida de los detalles. Presentan un algoritmo para


la creacin eciente de impostores tridimensionales precisos, que permite la
navegacin interactiva en escenas urbanas complejas. Otras aproximaciones
([AL99]), tambin utilizan imgenes para reemplazar objetos distantes, pero

layered-

en este caso, emplean imgenes con varios niveles de profundidad (

depth-image )

para los objetos que envuelven a la geometra visualizada.

En una etapa de preproceso, se calculan los subconjuntos del modelo que


pueden ser reemplazados por imgenes mediante una subdivisin espacial de
la escena. Presentan un algoritmo para la construccin y la visualizacin de
las imgenes con varios niveles de profundidad.

Ventajas: Estos mtodos presentan una serie de ventajas que permiten


acelerar la visualizacin de escenas complejas. El uso de texturas para la
visualizacin rpida de detalles, combinado con la idea de aumentar la informacin de los impostores con geometra, permite que el impostor sea vlido
durante bastantes

frames

y adems permite efectos de

parallax. Los algorit-

mos de subdivisin de la escena explotan las caractersticas intrnsecas de una


escena urbana, lo que permite una mejor segmentacin de la escena. Adems,
la disponibilidad del modelo 3D cerca del observador, permite operaciones
como deteccin de colisiones o simulacin de la iluminacin.

Limitaciones:

Existen una serie de limitaciones en estos mtodos. Las

transiciones entre las celdas de los modelos segmentados son, a menudo, muy
bruscas. El hecho de aadir informacin tridimensional introduce diferentes
tipos de distorsiones, y no elimina algunos de los efectos producidos por el uso
de impostores como los agujeros. Por ltimo, algunos de estos algoritmos de
segmentacin de la escena requieren un tiempo de preproceso muy elevado.

2.1. Visualizacin de escenas complejas

Principios de la segmentacin de modelos y uso de impostores.


La columna de la izquierda muestra las vistas creadas por un paseo por una
calle. La columna de la derecha muestra un vista area de la escena
Figura 2.3:

2. Trabajo previo

2.1.2.

Relief textures

Estas aproximaciones ([POC05], [BD06], [PO06]) proponen visualizar la


geometra utilizando una representacin basada en imgenes. La informacin

geomtrica se codica mediante una textura con profundidad (relief texture ) y se visualiza rasterizando una geometra arbitraria (por ejemplo la caja
contenedora). Para cada fragmento resultante, el shader calcula la interseccin del rayo correspondiente con la geometra. En algunos casos se puede
utilizar informacin preprocesada para acelerar el clculo de la interseccin.
Algunos autores [BD06], integran el algoritmo con una proyeccin perspectiva inversa para poder representar un conjunto ms amplio de formas. Otros
autores [PO06], almacenan ms de un valor de profundidad para permitir
proyecciones multievaluadas (varios puntos se proyectan en el mismo). Adems, se han desarrollado tcnicas muy ecientes basadas en la GPU para el
clculo de la interseccin entre el rayo de visin y la textura. Por otro lado, el
requerimiento extra en cuanto a memoria de textura es pequeo (dependiendo de los niveles de profundidad que queramos almacenar) y la visualizacin
depende del tamao de la pantalla y no de la complejidad geomtrica, por lo
que esta representacin es aplicable a muchas partes de una escena 3D.

Ventajas:

Presentan tcnicas para visualizar de forma eciente mapas

de relieve en las placas grcas actuales. En algunos casos, permiten incorporar mapas de alturas distorsionados o varios valores de profundidad en las
texturas para capturar formas ms complejas. Esto permite que las texturas
de relieve puedan reemplazar objetos completos, por ejemplo en el contexto
de los niveles de detalle.

Limitaciones: Una limitacin importante es que se producen efectos de


aliasing debido a la discretizacin en el clculo de las profundidades. Pero
la limitacin ms importante es que el modelo obtenido slo es vlido si se
visualiza desde un punto de vista prximo al que ha sido capturado (cono de
visin), de otra forma observaremos muchos errores.

2.1.3. Mallas texturadas


+
Estas aproximaciones ([CMR 99], [TCS03]) proponen un mtodo para
preservar los detalles de alta frecuencia en mallas simplicadas, independiente del mtodo de generacin de dichas mallas. Para ello utilizan texturas
(color, mapas de normales, alturas o sombras) para desacoplar la representacin de los detalles del proceso de simplicacin. La contribucin principal

2.1. Visualizacin de escenas complejas

Izquierda: estrategia de bsqueda binaria para el clculo de la


interseccin rayo-relief texture; derecha: diferencia entre usar una textura
convencional (a) y una textura de relieve (b)
Figura 2.4:

es que la preservacin de los detalles se realiza despus de la simplicacin


mediante la creacin de un conjunto de parches triangulares texturados que
posteriormente son empaquetados en un atlas de textura. El algoritmo puede
ser aplicado al resultado de cualquier algoritmo de simplicacin y permite
almacenar cualquier atributo que quiera ser recuperado de la malla de alta
resolucin. El algoritmo est compuesto por dos fases: muestreo de la supercie, para cada cara de la malla se crea un textura triangular que codica los
atributos presentes en la cara a preservar; y empaquetamiento de las texturas, todas las texturas triangulares se empaquetan en una textura cuadrada
compatible con las libreras grcas estndar.

Ventajas: Este algoritmo puede ser utilizado en conjuncin con cualquier


mtodo de simplicacin de la geometra existente; es capaz de recuperar
cualquier atributo de la malla; y el hecho de almacenar el detalle en texturas
permite una visualizacin muy eciente en los sistemas grcos actuales.

Limitaciones: Debido a que el detalle se almacena en texturas, los requerimientos de memoria de la malla simplicada aumentan considerablemente
por la necesidad de almacenar los mapas de textura; el algoritmo slo es
vlido en escenas con pocos objetos debido a estos requerimientos de almacenamiento. Adems presentan errores de
distinta de la direccin de proyeccin.

10

parallax

si la direccin de visin es

2. Trabajo previo

Figura 2.5:

2.2.

2.2.1.

Marco de trabajo de las mallas texturadas

Visualizacin de escenas gigantes

Far voxels

Esta aproximacin [GM05] permite la construccin y la inspeccin interactiva de modelos de supercies muy grandes. El mtodo integra tcnicas de

out-of-core ) y niveles de

recortado de la geometra, manejo de datos en disco (

detalle. En tiempo de preproceso, generan una jerarqua espacial mediante


una subdivisin binaria del espacio comprendido por la malla de tringulos
de entrada. Los nodos hoja dividen los datos de entrada en pedazos con un
nmero mximo prejado de tringulos, mientras que los nodos internos son

voxels ).

discretizados en un nmero jo de celdas cbicas (

Cada

voxel

con-

tiene una aproximacin, dependiente de la direccin, de la apariencia de la


subparte del volumen asociado visto desde la distancia. La aproximacin se
construye mediante un algoritmo de visibilidad que parametriza los
mediante las muestras obtenidas por un proceso de

ray-casting

shaders

del modelo

original. Durante la visualizacin, la estructura volumtrica se recorre en orden

front-to-back,

explotando los

vertexs programs

para la evaluacin en la

GPU de la representacin dependiente de la vista del


sin mediante

voxel, consultas de oclu-

hardware para descartar subrboles ocluidos, y entrada/salida

asncrona para detectar y evitar latencias en el acceso a los datos.

Ventajas: Esta tcnica es aplicable a un gran tipo de modelos de entrada


incluso aquellos que incluyen objetos muy detallados compuestos por partes

11

2.2. Visualizacin de escenas gigantes

Figura 2.6: Esquema del algoritmo Far voxels: El modelo se particiona jerrquicamente con un estructura BSP. Las hojas del rbol se visualizan
utilizando los tringulos originales, mientras que los nodos internos son aproximados utilizando voxels dependientes de la vista.

de una estructura topolgica compleja conectadas libremente entre ellas; el


algoritmo es completamente adaptativo y es capaz de conservar los detalles
topolgicos y geomtricos originales incluso en conjuntos de datos masivos;
est basado en la GPU, puesto que su estructura de grano grueso explota con
xito el modelo de representacin por lotes de las plataformas grcas actuales; adems, se pueden construir representaciones multiresolucin en paralelo
con un algoritmo

out-of-core.

Limitaciones: Este mtodo ha sido diseado para modelos estticos, la


edicin no est soportada; el proceso de muestreo es generalista y soporta
muchos modelos de entrada, pero se producen problemas de

aliasing

si no

se trazan sucientes rayos lo que hace aumentar el coste de preproceso signicativamente; las primitivas grcas utilizadas son apropiadas slo para
materiales difusos; y el algoritmo de visualizacin se esfuerza ms en que la
visualizacin sea interactiva que en obtener una buena calidad de imagen.

2.2.2.

Layered Point Clouds

En esta aproximacin [GM04], los autores presentan una estructura multiresolucin basada en puntos para la visualizacin interactiva de modelos
muy complejos. La estructura est basada en una jerarqua en espacio ob-

12

2. Trabajo previo
jeto de las nubes de puntos de entrada. Durante la visualizacin, las nubes
de puntos gruesas y nas son combinadas mediante un recorrido de arriba a
abajo de la estructura jerrquica para adaptar localmente las densidades de
muestreo de acuerdo con el tamao de la proyeccin en pantalla de la imagen.
Dado que cada nube est compuesta por varios miles de muestras, el coste
de la extraccin multiresolucin se amortiza evitando el envo de muchas
primitivas grcas al

pipeline. El renamiento progresivo basado en bloques

es adecuado para el recorrido de la estructura que se realiza en tiempo de

outbackface,

visualizacin y para ocultar posibles latencias en el acceso a los datos

of-core y se presta a la incorporacin


view frustum y oclussion culling ).

de algoritmos de recortado (

Ventajas: El sistema resultante permite visualizar modelos complejos


framerates muy altos (hasta 60M puntos/segundo), soporta la transmisin por la red (streaming ) y es fcil de implementar. El sistema es comparable en cuanto a implementacin y calidad de imagen a QSplat [RL00]. Debido
con

a su simplicidad es capaz de tratar modelos de muy elevada complejidad.

Limitaciones: La mayor limitacin es la calidad de la imagen. Dado que


el objetivo principal es la velocidad en la visualizacin, utilizan la visualizacin por

hardware

de puntos que proporciona OpenGL para la visualizacin

de nubes de puntos, y no utilizan

splats

para cada punto, lo que limita la ca-

pacidad para manejar correctamente la texturacin y las transparencias. La


integracin con tcnicas de ltrado en GPU puede resolver estos problemas
sin comprometer demasiado el tiempo de visualizacin.

Figura 2.7:

Descripcin del algoritmo Layered Point Clouds: A la

izquierda, el cliente recorre el rbol y solicita las nubes de puntos al servidor;


a la derecha, resultado de la visualizacin.

13

2.2. Visualizacin de escenas gigantes

2.2.3.

Quick VDR

Esta aproximacin fue presentada por [YSGM05], para la visualizacin interactiva basada en algoritmos dependientes de la vista de modelos gigantes.
Este algoritmo combina la simplicacin dependiente de la vista,

occlusion

culling, y visualizacin out-of-core. Los autores representan el modelo como


una jerarqua de clusters de mallas progresivas [Hop96] (CHPM). Utilizan la
jerarqua de clusters para un renamiento ms grueso y las mallas progresivas
para un renamiento local ms preciso. Presentan un algoritmo out-of-core
para el clculo de un CHPM que incluye descomposicin en clusters, generacin de la jerarqua y simplicacin. Introducen nuevas dependencias entre

clusters

en la etapa de preproceso para generar con pocos errores simplica-

clusters se utilizan para seleccin


de niveles de detalle (LOD), occlussion culling, y la navegacin out-of-core.
Introducen una latencia en cada frame al pipeline grco para traer del disco nuevos clusters visibles y evitar bloqueos. El CHPM permite visualizar

ciones drsticas en tiempo de ejecucin. Los

modelos complejos de CAD, modelos escaneados, de decenas o varios cientos


de millones de tringulos a 15-35

frames

por segundo con poca prdida de

calidad de imagen.

Figura 2.8:

Algoritmo Quick VDR: izquierda: jerarqua de clusters de

mallas progresivas, que se renan en tiempo de ejecucin para adaptarse al


framerate requerido; derecha: descomposicin en clusters del modelo de St.
Matthew.

Ventajas: Este mtodo permite el renamiento con un coste menor que


las jerarquas basadas en vrtices; es capaz de calcular simplicaciones drs-

clusters ; permite una


popping (elementos que

ticas, utilizando la jerarqua con la dependencia de


buena calidad en la visualizacin evitando efectos de
aparecen y desaparecen) entre

frames

sucesivos; adems es aplicable a todo

tipo de modelos poligonales.

14

2. Trabajo previo
Limitaciones:

La limitacin principal de este mtodo es el

frame

de

latencia introducido en el proceso de visualizacin. El nmero de posibles


simplicaciones representadas en un CHPM es menor que en una jerarqua
completa de vrtices; las dependencias introducidas entre

clusters puede cau-

sar errores en la visualizacin cuando se pasa de un nivel ms no a uno ms


grueso; el comportamiento del algoritmo depende de la descomposicin espacial y no son capaces de asegurar una buena descomposicin para todos los
modelos de entrada.

2.3.

Comparativa

A continuacin se muestra una tabla comparativa de las aproximaciones


descritas previamente:

Impostors
Relief
textures
Mallas
texturadas
Far
Voxels
Point
Clouds
Quick
VDR

Escenas Muchos Seleccin


gigantes objetos
No

No

No

Uso de
GPU

Artifacts

Observaciones

Muchos

Vlido para
un slo plano

No

No

No

Muchos

Vlido para
un slo objeto

No

No

Posible

Pocos

No

Pocos

Vlido para
pocos objetos
Emplea
mucha memoria

No

No

Posible

Pocos

Menor calidad
que la malla

No

No

Posible

Pocos

Costuras
entre nodos

Las dos primeras aproximaciones presentadas permiten reemplazar objetos distantes por una representacin basada en imgenes acelerando as el
proceso de visualizacin. El principal inconveniente es que estas representaciones slo son vlidas cuando el objeto est lejos del observador y en un cono
de direcciones de visin limitado. Si consideramos visualizar un slo objeto
una buena opcin son las mallas texturadas ya que conservan muy bien el
detalle de la malla original pero, como sucede con los impostores, si visualizamos el objeto desde una direccin diferente a la direccin de proyeccin
(direccin desde la que se obtienen las texturas) observaremos errores debido

15

2.3. Comparativa
parallax.
Las tres ltimas aproximaciones descritas son adecuadas para escenas

framerates muy elevados para escenas muy complejas:


Quick VDR 10-30 fps hasta 300 M tringulos; Far Voxels 30-45 fps hasta
500 M tringulos. Pero tambin presentan algunos inconvenientes: Far Voxels emplea mucha memoria para almacenar la estructura de datos; Layered
Point Clouds no llega a obtener la misma calidad que la malla original; y
en las escenas visualizadas con Quick VDR se observan errores debidos a las
complejas, obteniendo

costuras entre los nodos de la estructura jerrquica.

16

Captulo 3
ORI: Omni-directional

Relief

Impostors
3.1.

Introduccin

La exploracin en tiempo real de modelos 3D es un problema importante


en muchas aplicaciones prcticas. La cantidad de informacin geomtrica es
a menudo demasiado elevada, y se utilizan versiones simplicadas para representar objetos distantes. En los ltimos aos, se han propuesto una gran
variedad de representaciones, incluyendo las mallas de tringulos, las mallas

relief textures ).

texturadas, impostores y texturas de relieve (

Sin embargo, estas representaciones presentan una serie de limitaciones.


Las mallas de tringulos simplicadas y las mallas texturadas no preservan
detalles de alta frecuencia y producen errores de

parallax.

Los impostores

pueden ser una buena opcin para objetos distantes, pero slo son vlidos
para un cono reducido de direcciones de visin. Pueden aparecen errores por
deformacin o agujeros. El cono de direcciones vlidas tambin es aplicable a
las texturas de relieve, aunque en este caso, el cono es mayor. Pero se pueden
producir errores debido a la ausencia de informacin en zonas con una proyeccin multievaluada (varios puntos se proyectan en el mismo). Los impostores
con relieve pueden ser mapeados en una malla simplicada, pero se requiere
un nmero muy grande de impostores. Inversamente, los conjuntos reducidos
de impostores no son vlidos para direcciones de visin arbitrarias. Por otro
lado, los algoritmos basados en la composicin de seis texturas ortogonales
presentan problemas generalmente en objetos cncavos.

Los

Omni-directional Relief Impostors


17

(ORI) superan estos problemas

3.1. Introduccin
combinando cierto nmero de impostores en una representacin que preserva
los detalles de alta frecuencia, permite efectos de

parallax

e iluminacin por

fragmento. Comparado con las aproximaciones anteriores, los ORI incluyen


un nmero suciente de impostores correctamente orientados que permiten
su visualizacin desde cualquier punto de vista con pocos errores. Adems,
permite el clculo en tiempo de preproceso de una medida en espacio ima-

projected length threshold ), que permite visualizaciones de alta calidad

gen (

durante una navegacin interactiva de la escena.

Esta imagen ilustra el funcionamiento de los ORI: varios mapas


de relieve se combinan para obtener un conjunto de impostores que pueden
ser visualizados desde direcciones arbitrarias

Figura 3.1:

Contribuciones: Esta aproximacin proporciona nuevos algoritmos para la construccin, seleccin y visualizacin de una representacin compacta,
dependiente de la vista, para la exploracin interactiva de modelos muy complejos. Las principales contribuciones son:
Un algoritmo eciente para calcular un nmero suciente de planos

relief maps ).

correctamente orientados que soportan los mapas de relieve (

Un algoritmo para la seleccin dependiente de la vista de un conjunto


mnimo de

relief maps maximizando la calidad visual de la imagen nal,

y un algoritmo de visualizacin basado en la GPU, que combina los

relief maps

solapados, minimizando errores de muestreo y reduciendo

los requerimientos de memoria (ver apndice B).


El uso de una mtrica,

Projected Length Threshold

(PLT), calculada en

tiempo de preproceso y que permite medir la calidad de un conjunto de


impostores. Esta mtrica se utiliza para comparar diferentes estrategias
de construccin y seleccin de los impostores.
Los

Omni-directional Relief Impostors

pueden ser utilizados de forma

jerrquica, utilizando un esquema de subdivisin espacial, para la ins-

18

3. ORI: Omni-directional Relief Impostors


peccin interactiva de escenas complejas con formas muy complejas.

El PLT puede ser testeado en cada posicin de la cmara para decidir si


la proyeccin en pantalla del objeto permite su visualizacin con ORI. En el
caso de que la proyeccin en pantalla sea mayor que el lmite, se puede seguir
visualizando el ORI con algunos errores visibles, cambiar a una representacin con ms calidad, o utilizar una subdivisin espacial y visualizar los ORI
de los nodos ms pequeos.
Con el propsito de superar las limitaciones en cuanto a la direccin de
visin de los

relief maps

relief maps, parece una buena opcin intentar combinar varios

con orientaciones diferentes. Para realizar esta combinacin, se

deben solucionar las siguientes cuestiones: dado un objeto, cules son los
mejores

relief maps

a calcular? Dado un conjunto de impostores y una di-

reccin de visin, qu subconjunto de impostores hay que utilizar? Y para


cada fragmento de una regin solapada entre dos impostores, cmo decidir
que impostor es ms apropiado? Debido a que los impostores se calculan con
una cierta resolucin, es evidente que presentarn errores y defectos visibles
si nos acercamos lo suciente. Por lo tanto, se presenta otra cuestin, cul
es el umbral a partir del cual ya no se puede seguir utilizando el conjunto
de impostores? A continuacin se discuten las soluciones que presenta esta
aproximacin a las cuestiones mencionadas.

3.2.

Construccin

El primer aspecto del problema que nos ocupa puede ser planteado de
la siguiente forma: dado un modelo geomtrico de un objeto, y un nmero
deseado de impostores

n, encontrar las n

direcciones a utilizar para la cons-

truccin de los mapas de profundidad. El nmero de impostores escogido


afecta a los requerimientos de almacenamiento y de preproceso del modelo,
pero no a su visualizacin, debido a que slo se utilizan los impostores que
se necesitan. En el caso de los ORI, se utilizan 20 direcciones.
Existen varias estrategias para la eleccin de estas direcciones, que se
discuten a continuacin:
1.

Regularly spaced : las n

direcciones se muestrean de forma regular

alrededor del objeto.

19

3.2. Construccin
Esta aproximacin tiene la ventaja de su simplicidad. Pero probablemente construir impostores con poca relevancia. La mayora de los
objetos tienen zonas que no son muy interesantes comparadas con otras
(por ejemplo la base de una escultura), y estas zonas se muestrean igualmente que cualquier otra. Debido a que se usa

n = 20,

las direcciones

de visin consideradas son los vectores de posicin de los centroides


de las caras de un icosaedro jo centrado en el origen. Esto hace que
las normales queden espaciadas de tal forma, que la mxima desviacin entre una direccin arbitraria de visin y la direccin ms cercana
disponible en el muestreo sea de aproximadamente de 37 grados.
2.

Guaranteed minimal sampling : las n

direcciones son elegidas mi-

diendo la informacin contenida en la imagen del objeto visto desde la


direccin en cuestin, y utilizando direcciones que proporcionen ms
informacin. Existen varias alternativas para realizar este clculo. En
este caso, se utiliza una estrategia presentada en [VFSH04], que fue
diseada para el modelado basado en imgenes.
Esta aproximacin intenta solucionar los problemas de la propuesta
anterior. El problema es que al operar sobre un nmero prejado

n, pa-

ra objetos complicados algunas direcciones puede que no queden bien


muestreadas, reduciendo la aplicabilidad omnidireccional del conjunto
de impostores.
3.

Information-based perturbation : encontrar las direcciones cercanas


a las usadas en la primera estrategia que maximicen el contenido de la
informacin y la estabilidad de la imagen (pequeas perturbaciones
de la direccin de visin no introducen nuevas caras del objeto en la
imagen, una propiedad deseable ya que las caras perpendiculares al
impostor no son muestreadas por el

relief map ).

Para cada direccin

inicial, se busca en las direcciones de visin cercanas, la que proporciona una mayor cantidad de informacin, utilizando la medida de la
entropa de la direccin de visin presentada en [VFSH04]. La bsqueda se realiza para un conjunto de direcciones que tienen una distancia
mxima de cuatro grados con la inicial.
Esta estrategia es un compromiso entre las dos primeras, debido a que
utiliza el contenido de la informacin para ajustar las direcciones de
visin, pero no se aleja demasiado del muestreo regular con el propsito de asegurar la existencia de impostores para cualquier punto de vista.

Se han comparado experimentalmente las estrategias propuestas. La gura 3.2 muestra dos vistas del modelo

20

bunny

en las que cada tringulo se

3. ORI: Omni-directional Relief Impostors


colorea de acuerdo con el nmero de impostores que lo captan. En negro se
pintan los tringulos que no se ven desde ninguna direccin de proyeccin.
Los tringulos rojos slo son capturados por un impostor. Cuanto ms claro
es el color mayor es el nmero de impostores que cubren el tringulo. En
la implementacin, se ha adoptado la estrategia 3 ya que las pruebas realizadas demuestran que la introduccin de una pequea perturbacin en la
direcciones de proyeccin de las texturas de relieve produce una mayor y ms
uniforme cobertura del modelo.

Comparacin de estrategias de muestreo: dos vistas diferentes,


utilizando la estrategia regulary spaced (arriba) y la estrategia informationbased (abajo). Colores claros signican que el pxel se encuentra representado
en un mayor nmero de impostores (mayor muestreo)
Figura 3.2:

Para soportar vistas oblicuas, los polgonos de cada impostor se extienden


para proporcionar fragmentos adicionales a la GPU y evitar agujeros. Estas
extensiones son virtuales y por lo tanto no necesitan memoria de textura,

fragment shader
relief map real.

debido a que el
intersecta el

3.3.

evita los accesos a textura hasta que el rayo

Seleccin

El coste de visualizacin de cada impostor no es negligible, por eso no


es necesario enviar todos los impostores al

pipeline

de visualizacin si con

unos pocos es suciente. Obviamente, los impostores pueden ser descarta-

21

3.3. Seleccin
dos comparando la direccin de visin con la normal del plano soporte del
polgono del impostor, pero parece razonable utilizar menos de la mitad de
los impostores en la mayora de los casos. Igual que en la construccin, se
han evaluado diferentes estrategias experimentalmente. Los algoritmos de
seleccin evaluados han sido los siguientes:
1.

m closest:

En este caso se utilizan los

m < n

impostores para los

cuales la normal del plano soporte es la ms cercana a la direccin de


visin. A pesar de que esta estrategia proporciona los mejores muestreos
para dicha direccin de visin, no se da siempre el caso que el segundo
impostor ms cercano sea el que mejor complementa la informacin
proporcionada por el ms cercano.
2.

best: El impostor ms cercano no es necesariamente el mejor.


m impostores ms cercanos se emplea mucho
tiempo de rendering sin producir un fragmento til. En su lugar, se
im

En general, tomando los

calculan en tiempo de preproceso para cada una de 320 direcciones espaciadas de forma uniforme (obtenidas subdividiendo el icosaedro), el
conjunto de los mejores impostores a utilizar, hasta un mximo de

m.

Para cada una de las 320 direcciones, se comparan diferentes combinaciones de impostores con el resultado de visualizar el modelo original
desde la direccin de visin. La combinacin es vlida si la imagen obtenida diere de la original en un

0,2 % (0,2 %

Inicialmente, se comprueba con cada uno de los

de pxeles erroneos).

ms cercano si con

uno es suciente. Si se supera el error mximo establecido, se comprueba con parejas del conjunto de los

m ms cercanos, y as hasta encontrar

una combinacin de los impostores que no supere el error mximo. Este


conjunto se almacena y se procede a la siguiente direccin de visin.
Durante la visualizacin, se utiliza el conjunto correspondiente a la direccin muestreada ms prxima a la direccin de visin.

En la gura 3.3 se muestran las ventajas de la opcin 2. Las dos primeras


imgenes representan la peor vista utilizando slo un impostor, cuando se

elige el ms cercano ( ) y el segundo ms cercano ( ). Obsrvese que en este


caso la eleccin del segundo impostor ms cercano es mejor que la eleccin del
ms cercano (la normal de ambos impostores forma un ngulo de 30 grados
con la direccin de visin). Por otro lado, si utilizamos los mejores imposto-

res para cada direccin de visin, la peor vista posible ( ) posee mucha ms
informacin que en el caso anterior.

22

3. ORI: Omni-directional Relief Impostors

Impacto del criterio de seleccin. Para cada una de las estrategias


se visualiza la peor vista del modelo. Los pxeles rojos son pxeles no presentes
en el impostor.

Figura 3.3:

3.4.

Visualizacin

Una vez se han seleccionado los impostores, los polgonos soporte de cada uno de los impostores son enviados al

shader

pipeline

grco, donde el

fragment

calcular el mapa de relieve de los impostores. Sin embargo, existen

pxeles cubiertos por ms de un impostor, y por lo tanto es necesario determinar cual es el correcto. Ntese que el simple ordenamiento en profundidad de
los fragmentos no garantiza el ltrado correcto, debido a que los

relief maps

generan errores de relleno detrs de las caras que han generado la imagen

solid artifacts ). Otros autores [PO06], han sugerido almacenar


relief maps

del impostor (

mapas de relieve multinivel para solucionar este problema. Los

multinivel estn limitados por el hecho que estas tcnicas slo pueden ser visualizadas en la proyeccin sobre el plano de visin del polgono soporte, por
lo tanto an almacenando mltiples profundidades, el modelo se ver plano
si se gira. El mtodo basado en ORI utiliza en su lugar diferentes direcciones
de proyeccin que nos proporcionan, por un lado, la informacin que falta, y
por otro, la cobertura adicional del plano de visin, por lo tanto, es posible
visualizar el modelo sin deformacin cuando se realizan rotaciones.
Para detectar los

solid artifacts

el

shader

detecta discontinuidades pro-

nunciadas en la profundidad, cuando se realiza el clculo de interseccin del


rayo de visin con el modelo. Cuando el

23

shader

traza el rayo, eventualmente

3.4. Visualizacin
AyB

encontrar dos muestras vecinas situadas sobre y debajo (

en la gu-

ra 3.4), respectivamente, de la supercie del objeto. Si la diferencia entre las

respectivas profundidades almacenadas (


un cierto umbral, el

shader

en la gura 3.4) es mayor que

entiende que es una pared vertical y descarta el

fragmento.

Figura 3.4:

Deteccin de solid artifacts en el shader

La utilizacin de varios

relief maps a la vez (en un mismo frame ), produce

que algunos pxeles en la imagen estn cubiertos por el polgono soporte de


ms de un impostor. En este caso, es necesario un mecanismo para escoger
cual de ellos determinar el color del pxel. Las diferentes opciones que han
sido testeadas son (ver gura 3.5):

1. Utilizar el valor de profundidad ( ) del plano del impostor. Esta opcin


es arbitraria y en la mayora de los casos es la peor opcin.
2. Utilizar la

real del fragmento, obtenida en el

fragment shader

en

el clculo de la interseccin rayo-supercie. El inconveniente es que el


impostor que proporciona el color puede no ser el que mejor muestrea
la porcin del modelo. Adems, en ausencia de oclusiones, todos los
fragmentos que muestreen el punto tienen aproximadamente la misma
profundidad, y por lo tanto el resultado es arbitrario. Esta estrategia
corresponde a las guras 3.5(b) y 3.5(g).
3. Priorizar el impostor que est ms cerca de la direccin de visin.
Esto se puede hacer de forma eciente con

glDepthRange(zi , zi ),

pa-

ra el impostor i-simo; para el caso se puede seleccionar un nmero


f set
0 < of f set 1 y obtener zi = i of20 , para los impostores ordenados de los ms cercanos a los ms lejanos. Este mtodo tiene la ventaja

24

3. ORI: Omni-directional Relief Impostors


que probablemente elija la mejor muestra disponible. Esta estrategia
se muestra en las guras 3.5(c) y 3.5(h).
4. Utilizar el impostor cuya normal se acerca ms a la normal de la supercie del modelo en el punto de interseccin obtenido. Ya que no se
utiliza el valor actual de profundidad, un pxel puede obtener el color de una muestra ms lejana, pero mejor alineada. Esta estrategia
corresponde a las guras 3.5(d) y 3.5(i).
5. Utilizar el valor correcto de la

relief map, modicada


valor de z codicado en

obtenida del

para priorizar las mejores muestras. Dado el

relief map, valor entre [0,1] con una resolucin de 1/256, se calcula
bias = 1/32, y se decrementa la z mediante bias cos(impostorNormal,
surfaceNormal ). Este valor de profundidad se convierte a coordenadas
normalizadas y se almacena en el fragmento en el shader. Esta estrateel

gia se muestra en las guras 3.5(e) y 3.5(j).

Las pruebas realizadas demuestran que para visualizar un solo objeto, la


tercera opcin de las mencionadas anteriormente es la mejor. Es tan eciente
como la cuarta propuesta, y produce menos errores. Pero en nuestro caso, al
utilizar una aproximacin jerrquica, la opcin adoptada para la implementacin es la 5, debido al clculo correcto de la visibilidad combinado con una
buena eleccin de las muestras.

3.5.

PLT:

Projected Length Threshold

El PLT indica el tamao mximo de la proyeccin de un cierto objeto en


coordenadas de dispositivo, de tal forma que la visualizacin del ORI desde
cualquier direccin de visin puede ser considerada perceptualmente similar
a la imagen visualizada del objeto inicial desde la misma direccin de visin.

El clculo del valor del PLT est basado en el error de recubrimiento

coverage error ).

El error de recubrimiento

pxeles y una direccin de visin

di (s)

para un

viewport

de

es el error, en nmero de pxeles, entre

la visualizacin axonomtrica del ORI y la visualizacin axonomtrica del


objeto inicial. En denitiva, es el nmero de pxeles cubiertos por la imagen
de referencia y no cubiertos por la imagen generada con el ORI.

25

3.5. PLT: Projected Length Threshold

Estrategias en el clculo de la profundidad: (a) modelo original,


(f) impostores utilizados en el test; (b) y (g) clculo de la z real en el fragment
shader; (c) y (h) priorizar el impostor ms cercano a la direccin de visin;
(d) e (i) utilizar el impostor cuya normal est ms cercana a la normal de la
supercie; (e) y (j) clculo de la z real modicada para favorecer las mejores
muestras. Las elipses destacan errores debidos a la seleccin de la estrategia
en el clculo de la z. La la inferior muestra qu impostor aporta el fragmento
Figura 3.5:

Se dene el error de recubrimiento global (

global coverage error ) GC(s)

como el error mximo de visualizacin para cualquier direccin de visin


arbitraria, dado un tamao de proyeccin

del objeto en coordenadas de

dispositivo. El error de recubrimiento de global se obtiene de la siguiente


forma:

GC(s) = M ax(di (s), i = 1 . . . Nv )


Este mximo se calcula sobre un nmero limitado de direcciones de visin

Nv .

En este caso, se utiliza

Nv = 320

direcciones de visin isotrpicas

obtenidas a partir de la subdivisin del icosaedro.


Inicialmente se utiliza una aproximacin para el PLT, basada en el valor
del

global coverage error.

Una vez se ha obtenido el

GC(s0 )

para un cierto

s0 , deberamos iterar hasta encontrar el mximo smax tal que


GC(smax ) es menor que una cierta tolerancia. De todas formas, esta iteracin

tamao inicial

no es necesaria ya que experimentalmente se ha comprobado que como es

26

3. ORI: Omni-directional Relief Impostors


lgico,

GC(s)

es proporcional al nmero de pxeles en el

decir:

viewport (s

s ), es

GC(s0 )
GC(smax )
=
2
s0
s2
max

Parece lgico admitir que en media slo hay un error de recubrimiento para
cada la de pxeles del

viewport (GC(smax ) = smax ).

Sustituyendo en la

frmula anterior,

1
s2
GC(s0 )
0
=
P LT = smax =
s2
smax
GC(s0 )
0
smax

El valor del PLT

se calcula para cada ORI en la etapa de prepro-

ceso. Durante la visualizacin, se puede garantizar una buena calidad visual


siempre que la proyeccin en pantalla del objeto no supere

smax

pxeles.

Una consecuencia adicional es que la resolucin de las texturas del impostor puede ser calculada en esta etapa del preproceso. Una buena opcin
es considerar el tamao de las texturas del orden de

2 smax .

La siguiente tabla muestra una comparacin de los resultados obtenidos


con el modelo del armadillo, utilizando dos criterios de seleccin de impostores diferentes: los

i<6

ms cercanos a la direccin de visin (m

= 1 . . . 4)

y los

mejores (obtenidos mediante el algoritmo explicado en la seccin 3.3).

El error de recubrimiento medio decrece de 1.18 % a 0.17 % mientras que el


valor del PLT aumenta de 15 a 270 pxeles.

Minimum
coverage
error
Maximum
coverage
error
Average
coverage
error
PLT

Impostors

1 closest 2 closest 3 closest 4 closest i<6-best


0.21 %

0.10 %

0.09 %

0.07 %

0.1 %

6.46 %

2.28 %

1.37 %

0.45 %

0.37 %

1.18 %

0.44 %

0.23 %

0.18 %

0.17 %

15

44

80

222

270

2.9 avg.

27

3.5. PLT: Projected Length Threshold

28

Captulo 4
HORI: Hierarchical ORI
4.1.

Introduccin

La visualizacin interactiva de modelos complejos es un desafo en los


grcos por computador. Mientras que las prestaciones de las placas grcas
estn continuamente en aumento, las ganancias ms signicativas se obtienen
adaptando la complejidad del modelo a la contribucin nal en la imagen visualizada. La solucin ideal sera determinar de una forma eciente el modelo
menos detallado que satisface ciertas propiedades perceptivas de la imagen
nal. Una heurstica comn es construir varias versiones de un modelo con
varios niveles de detalle (LOD); la malla de tringulos ms detallada se utiliza cuando el objeto est cerca del observador, y las menos detalladas son
sustituidas a medida que el objeto retrocede.
Los conjuntos de mallas con nivel de detalle son apropiadas para muchas
aplicaciones, pero aparecen dicultades cuando se visualizan modelos de gran
escala, que potencialmente pueden rodear al observador:
Muchas caras del modelo pueden quedar fuera de la pirmide de visin y
no contribuir a la imagen nal. A pesar de que estas caras se recortan en
las primeras etapas del proceso de visualizacin, este proceso requiere
un coste.
De forma similar, a menudo es innecesario visualizar caras orientadas de
espaldas al observador. Normalmente, estas caras se utilizan utilizando
un test de recortado

backface, pero este test tambin tiene un coste.

Dentro de la pirmide de visin, algunas regiones del modelo permanecen ms cercanas al observador que otras. Las mallas con nivel de
detalle no proporcionan el nivel de detalle apropiado para el modelo

29

4.2. Generacin
completo.

Muchos de estos problemas pueden ser solucionados representando la escena como una jerarqua. Las partes de la escena fuera de la pirmide de
visin pueden ser descartadas ecientemente utilizando un recortado jerrquico, y el nivel de detalle puede ser ajustado independientemente en cada
nodo de la jerarqua.

Exploracin interactiva del modelo del Armadillo. Izquierda: visualizacin con el ORI de la raz; derecha: visualizacin con los ORI de un
nivel de subdivisin. Se puede observar como los artifacts de la mano desaparecen
Figura 4.1:

4.2.

Generacin

En el caso de una subdivisin espacial jerrquica es necesario poder construir el conjunto de impostores para cualquier parte del modelo interior a
una regin cbica del espacio arbitraria. Dado un modelo geomtrico
una regin

podemos dividir

submodelos recortados

M1

en dos subregiones,

M2 .

R1

R2

en

y obtener dos

Se construye entonces los ORI para cada

30

4. HORI: Hierarchical ORI


uno de los submodelos

M1

M2 .

Para realizar este recortado del modelo en

las diferentes subregiones existen bsicamente dos tcnicas:


Renderizar el modelo completo
delimiten el submodelo

Mk

M,

utilizando planos de

clipping

que

deseado. OpenGL (ver apndice A) soporta

la denicin de planos que son utilizados para recortar la geometra.


El nmero de planos depende de la implementacin pero como mnimo
OpenGL permite la denicin de seis planos. Se denen mediante la
funcin

glClipPlane.

Este mtodo es adecuado si la memoria princi-

pal del ordenador puede manejar toda la informacin geomtrica (el


espacio requerido para visualizar la geometra es menor que el espacio
disponible en la memoria principal).
Realizar un preproceso de recortado. Este mtodo consiste en leer el
modelo de entrada

y slo quedarnos con los puntos o tringulos que

estn dentro de una cierta regin

Rk . Este mtodo es adecuado cuando

el modelo de entrada es gigante y no puede ser almacenado directamente en la memoria principal. Estos mtodos que trabajan con los datos
en disco y no directamente en la memoria se conocen como mtodos

out-of-core.

Una observacin interesante en cuanto a la subdivisin en regiones, es que


la visualizacin simultnea de los ORI de varias regiones producen el mismo
resultado que la visualizacin del ORI inicial del modelo

M . Con el propsito

de evitar errores, se induce un solapamiento entre las regiones cbicas con un


valor de desplazamiento del 5 % del tamao de la arista de la regin anterior
en la jerarqua.
Para realizar la construccin de la estructura jerrquica se puede utilizar cualquier esquema de subdivisin del espacio (
nuestro caso, se genera un

octree

bintree, Kd-tree, . . . ). En

de ORIs subdividiendo el espacio corres-

pondiente al modelo de entrada en 8 regiones idnticas.

4.2.1.

Top-down

Es posible construir una representacin jerrquica basada en ORI para


una escena compleja con un algoritmo directo. Primero se calcula la caja
englobante

de la escena. En un primer paso, se calcula el ORI de la escena

completa, y se almacena en el nodo raz de la jerarqua. Esta informacin

31

4.2. Generacin
incluye el correspondiente valor del PLT. Posteriormente, se realiza una subdivisin de B, se calcula los ORI para cada una de las regiones resultantes,
se almacenan en los nodos hijos, y se procede recursivamente.
Para la construccin de los ORI de las subregiones, simplemente se aplica el algoritmo presentado en el captulo 3, visualizando el modelo con seis

clipping que corresponden a la frontera de la regin cbica. La sub-

planos de

divisin termina cuando el PLT es mayor que un valor predenido, o cuando


se alcanza una profundidad mxima en el rbol.

4.2.2.

Bottom-up

La estructura jerrquica se construye de forma inversa que en el caso anterior. Dado un nmero

n,

que indica el nmero de niveles de la jerarqua

a construir, inicialmente se calcula la caja contenedora de la escena

B.

En

cada paso del algoritmo, se comprueba si se ha alcanzado el nivel mximo


de subdivisin

n.

En tal caso, se visualiza la parte del modelo interior a la

regin cbica correspondiente. Si todava no se ha alcanzado el nivel mximo,


se subdivide la regin y se procede recursivamente.
Para construir los ORI de los nodos terminales se aplica el algoritmo descrito en el captulo 3. Es necesario recortar el modelo y slo visualizar el
interior del cubo correspondiente al nodo. Este recortado se puede realizar
utilizando cualquiera de las dos tcnicas descritas en la seccin 4.2. Ntese
que en el algoritmo anterior, realizar el preproceso de recortado del modelo
no tiene sentido si podemos visualizar el modelo completo (requerimiento del

top-down ), ya que es mucho ms eciente el recortado que realiza


con los planos de clipping. No obstante, el recortado manual per-

algoritmo
OpenGL

mite el tratamiento desde disco de los datos lo que hace que esta tcnica sea
ms apropiada para modelos tridimensionales gigantes.
En la construccin de los ORI de los nodos no terminales de la jerarqua
se pueden adoptar dos estrategias diferentes: proceder como en el caso de los
nodos terminales y realizar un recortado del modelo a la regin correspondiente al nodo, o visualizar los ORI de los hijos del nodo a calcular.

32

Captulo 5
Algoritmo de navegacin
dependiente de la vista
El algoritmo de navegacin extrae una representacin dependiente de la
vista procedente de la estructura jerrquica desde el punto de vista actual
del observador. Realiza un renamiento desde los nodos ms grandes a los
ms pequeos. El algoritmo recorre la estructura en pre-orden recursivamente, manteniendo una lista de nodos activos que llamaremos

frente, como se

muestra en la siguiente gura:

Figura 5.1:

Vista esquemtica de una jerarqua de ORI

El frente de la jerarqua dene una simplicacin determinada. Renar


con ms detalle una regin desplaza el frente hacia abajo, mientras que una
visualizacin con menos detalle desplaza el frente hacia arriba.
La navegacin dependiente de la vista est basada los valores del PLT
de los nodos del rbol. Durante el recorrido del rbol (en pre-orden), un no-

33

do se visualiza si su valor de PLT es mayor que el tamao en pxeles de la


proyeccin en pantalla de su caja contenedora. Si el PLT es menor que el
tamao en pxeles de la proyeccin en pantalla de su caja contenedora, es
posible que existan muchos errores de recubrimiento. En este caso, el nodo
no se visualiza y se realiza el mismo test con sus hijos. Cuando se ha llegado
a la profundidad mxima del rbol, se puede visualizar el ORI o cambiar a
una representacin mejor (mallas de tringulos) para objetos cercanos.
Con el n de optimizar el algoritmo de visualizacin y no tener que calcular la proyeccin en pantalla de los nodos de la jerarqua en cada

frame, se

realizan una serie de clculos en tiempo de preproceso. El usuario proporciona


una tolerancia, en pxeles, que gua el proceso de renamiento del algoritmo:
este valor representa el tamao mximo de la proyeccin de un nodo de la jerarqua en pantalla. La posicin del frente viene denida por dicha tolerancia.
Para calcular el nivel requerido con el que visualizar cada nodo de la
jerarqua y obtener as el frente desde un punto de vista dado (o

= (ox , oy , oz ))

se procede de la siguiente forma:


1. Hallamos el vrtice del nodo

v = (x, y, z)

2. Calculamos la distancia al cuadrado

ms cercano al observador.

dq (squared distance )

entre el vr-

tice y el observador.

dq = (ox x) (ox x) + (oy y) (oy y) + (oz z) (oz z)


3. Buscamos
requerido

dq
n:

en la tabla

(ver la ecuacin 5.1) y obtenemos el nivel

n : = 0
mientras dq < D[n] hacer
n : = n + 1
fmientras

(n = 0 indica la raz, n = 1 los hijos, n = 2 los nietos, . . . )


El clculo de la tabla

se realiza en base a la frmula:

f ov 180
L 2n
= tolerancia
d
N vertP ixels
Donde

(5.1)

es la longitud del lado del cubo que representa todo el universo

(en nuestro caso el nodo raz de la jerarqua);

34

N vertP ixels

es el nmero de

5. Algoritmo de navegacin dependiente de la vista


pxeles en vertical de la ventana de visualizacin;
tura vertical de la cmara virtual y

tolerancia

f ov

es el ngulo de aper-

es el valor que introduce el

usuario y que representa la longitud media en pxeles de la proyeccin de los


nodos en la pantalla de visualizacin.
La ecuacin 5.1 representa una equivalencia entre ngulos (en radianes).
Supongamos que el observador est situado a una distancia

de un cierto

n en la jerarqua, como se muestra en la gura 5.2. Por


un lado, dado que el nodo est a profundidad n la longitud de su lado ser
L2n , siendo L la longitud del nodo raz. Tenemos que sen() = (L2n )/d,
y para ngulos pequeos, podemos asumir que sen()
(en radianes):
nodo de profundidad

sen() =

L 2n
d

Por otro lado, para mantener la calidad deseada en la visualizacin la proyeccin en pantalla del nodo no debe sobrepasar la tolerancia. La tolerancia
es un valor expresado en pxeles. Sabiendo que la ventana de visualizacin
tiene

N vertP ixels

tura vertical de

fov

pxeles de altura y que la cmara virtual tiene una abergrados, podemos obtener el equivalente en radianes de la

tolerancia:

toleranciaradianes = toleranciapixels

f ov 180
N vertP ixels

Clculo del nivel requerido con el que visualizar la jerarqua segn


la tolerancia introducida por el usuario

Figura 5.2:

Esta tabla se calcula en tiempo de preproceso y se recalcula cada vez que


cambia el valor de alguno de los parmetros que intervienen en la frmula.
Para cada uno de los niveles

i de la jerarqua se procede de la siguiente forma:


35

const := 3.1415927 / 180


para i = 0 hasta n hacer
aux := L * 2^(-i) / ((fov / NvertPixels) * tolerancia * const)
D[i] := aux * aux
fpara

36

Captulo 6
Resultados
Se han realizado pruebas con dos modelos diferentes:

Lucy, malla de tringulos que representa un modelo de un ngel cristiano. El modelo ha sido obtenido mediante el escaneo de la estatua
que realiz el laboratorio

boratory

Stanford University Computer Graphics La-

[sta] en 1998. La reconstruccin est libre de agujeros pero

contiene caras superpuestas, por lo que el nmero de agujeros pasantes (

genus )

en formato

es mayor de lo que parece a simple vista. El modelo est

ply

(formato creado por el mismo laboratorio de Stanford).

Este formato representa el modelo geomtrico mediante dos tablas: una


tabla

que contiene los vrtices del modelo y una tabla

ne los tringulos del modelo. La tabla

que contie-

est formada por tuplas de 3

elementos donde cada elemento es una posicin de la tabla de vrtices,


como muestra el siguiente esquema:

37

Modelo del ngel Lucy. Est formado por 14.027.872 vrtices y


28.055.742 tringulos

Figura 6.1:

Malecn de La Habana (Cuba), modelo de puntos que representa


la avenida que corre por el litoral norte de la ciudad de La Habana,
con una extensin de 7 kilmetros aproximadamente. El modelo se ha
obtenido mediante escner lser. El proceso de captacin fue realizado por el

Laboratorio de Modelizacin Virtual de la Ciudad

[lmv]. El

modelo se almacena en un archivo de texto plano, donde cada lnea


representa un punto del modelo. Cada punto viene representado por
sus coordenadas

(x, y, z),

el color

38

(r, g, b)

y la normal del punto.

6. Resultados

Modelo de puntos del Malecn de la Habana. Est compuesto por


6.300.523 puntos

Figura 6.2:

Para evaluar el algoritmo implementado se ha denido una trayectoria


de la cmara virtual para cada uno de los modelos. La trayectoria empieza
desde un punto de vista lejano, desde el cual se visualice el modelo completo,
y termina en una zona del modelo en la que podamos apreciar los detalles
del mismo. En ambos casos, las trayectorias estn formadas por 500 puntos
de control. Las pruebas se han realizado en un

Intel Core2 T6400

Nvidia GeForce 7950GT. Todos


han realizado en un viewport de 512x512 pxeles.
con una placa grca

a 2.13GHz

los experimentos se

Las tablas 6.1 y 6.2 muestran los resultados de los experimentos realizados
con el modelo

Lucy y con el modelo del Malecn de la Habana, respectivamen-

te. En ellas se puede observar como el algoritmo de visualizacin se adapta


a la tolerancia indicada por el usuario enviando al

pipeline

grco los nodos

necesarios en cada momento. Los requerimientos de memoria aumentan a

39

medida que disminuye la tolerancia. En el mejor de los casos, se utilizan 1.1


MB y 5.3 MB de textura en el modelo

Lucy, y 1.6 MB y 8.2 MB de textura

en el Malecn, utilizando texturas de 128x128 y 256x256 respectivamente.


En el peor de los casos, la memoria de textura empleada es de 10.8 MB y
56 MB para

Lucy, y 7.3 MB y 37.7 MB para el Malecn. Las placas grcas

actuales soportan estos requerimientos de memoria sin problemas. Obsrvese

fps )

que el rendimiento (

no se ve afectado por el tamao de la textura ya

que al ser los HORI una representacin basada en imgenes, el factor que
condiciona el rendimiento de la visualizacin es el tamao del

viewport.

La tabla 6.3 muestra los valores del PLT para los nodos de los distintos
niveles del

octree.

A medida que aumenta el nivel de subdivisin, el PLT

aumenta debido a que la regin que representan los nodos cada vez es ms
pequea. Pero tambin observamos que los valores mnimos son muy pequeos, debido a que hay regiones, por pequeas que sean, que tienen detalles de
alta frecuencia que impiden que el nodo se pueda visualizar en un

viewport

mayor sin perder dichos detalles. El caso ideal sera que el PLT fuese igual
al tamao del

viewport

y que ste valor fuese algo menor que el tamao de

las texturas.
La gura 6.3 muestra los distintos niveles de subdivisin empleados en
el experimento con el modelo

Lucy.

Se puede observar como los nodos que

no contienen informacin (no hay geometra) no son enviados al

pipeline

de

visualizacin, evitando as clculos innecesarios y mejorando el rendimiento


del algoritmo de navegacin.
Las guras 6.4, 6.5 y 6.6 muestran los resultados de las pruebas con el
modelo

Lucy

utilizando diferentes valores de la tolerancia y del tamao de

las texturas. En la gura 6.4 observamos muchos

artifacts

en el punto inicial

y en el punto medio de la trayectoria debido a que el tamao del

viewport

(512x512) es muy superior al PLT del nivel 1 por lo que se producen errores
de

aliasing. A medida que aumentamos el tamao de las texturas y reduci-

mos la tolerancia los resultados de la visualizacin mejoran progresivamente.


Al subdividir la escena cada nodo de la jerarqua se proyecta en un nmero
menor de pxeles y se acerca progresivamente a su PLT, hecho que nos garantiza una correcta visualizacin. Por ejemplo, los

artifacts

que observamos

en el punto inicial de la trayectoria en la gura 6.4 ya no se ven en el punto


inicial de la gura 6.5. En el punto medio de la gura 6.5 seguimos viendo
algn error (por ejemplo en el ala izquierda), que ya no aparece en el mismo
punto de la gura 6.6 ya que la diferencia en el valor de la tolerancia hace
que visualicemos con ms detalle el modelo.

40

6. Resultados

Tamao

Tolerancia

128
256
128
256
128
256

1000
400
100

FPS

Nodos

Impostores

Memoria (MB)

Max/Min

textura

Max/Min/Avg

Max/Min/Avg

Max/Min/Avg

18

39

60

6-8

60

6-8

34

4-6

32

4-6

16

4-6

14

4-6

4.4

0.5

1.1

23

41

22

95

15

51

41

41

41

95

95

95

2.9

5.3

10.8

1.7

5.8

56

8.8

30

10.8

10.8

10.8

56

56

56

Resultados con el modelo Lucy, utilizando un octree de 3 niveles


de profundidad
Tabla 6.1:

Tamao

Tolerancia

128
256
128
256
128
256

1000
400
100

Nodos

Impostores

Max/Min

textura

FPS

Max/Min/Avg

Max/Min/Avg

70

18

70

16

28

18

26

16

20

18

20

16

Memoria (MB)

15

37

14

29

21

64

17

48

29

29

29

64

64

64

Max/Min/Avg

4.2

0.3

1.6

22.2

1.7

8.2

7.3

1.9

5.5

37.7

10

28.3

7.3

7.3

7.3

37.7

37.7

37.7

Resultados con el Malecn de la Habana, utilizando un octree de 3


niveles de profundidad

Tabla 6.2:

1 nivel

Lucy

Malecn
Tabla 6.3:

2 niveles

3 niveles

Max/Min/Avg

Max/Min/Avg

Max/Min/Avg

35

35

35

72

39

50

292

25

70

36

36

36

50

31

41

362

25

66

Valores del PLT para los distintos niveles de profundidad del octree

41

Capturas de pantalla de la subdivisin utilizada en el modelo Lucy.


De izquierda a derecha: 1 nivel, 2 niveles y 3 niveles de subdivisin

Figura 6.3:

Capturas de pantalla de la trayectoria en el modelo Lucy utilizando texturas de 128x128 y una tolerancia de 1000 pxeles. De izquierda a
derecha: punto inicial, punto medio y punto nal de la trayectoria

Figura 6.4:

42

6. Resultados

Capturas de pantalla de la trayectoria en el modelo Lucy utilizando texturas de 256x256 y una tolerancia de 400 pxeles

Figura 6.5:

Capturas de pantalla de la trayectoria en el modelo Lucy utilizando texturas de 256x256 y una tolerancia de 100 pxeles

Figura 6.6:

43

44

Captulo 7
Conclusiones
Este proyecto amplia las tcnicas utilizadas hasta ahora para la visualizacin interactiva de escenas muy complejas presentando una nueva representacin para este tipo de escenas junto con un algoritmo que permite visualizar
dicha representacin. Se han presentado una serie de algoritmos para la construccin, seleccin y visualizacin de los

Impostors.

Hierarchical Omni-directional Relief


parallax e iluminacin avanzada

Los HORI soportan efectos de

por fragmento preservando los detalles de alta frecuencia para cualquier direccin de visin.
Se ha propuesto el uso de una mtrica en espacio imagen para la seleccin
de un subconjunto suciente de

relief maps

para cada direccin de visin y

para medir la calidad de la imagen visualizada. El algoritmo de navegacin


utiliza esta mtrica para extraer una representacin dependiente de la vista
procedente de la estructura jerrquica que se adapta a los requerimientos
visuales, en cuanto a calidad, del usuario.
Adems, esta aproximacin requiere un clculo computacional negligible
en la CPU, y los tiempos de preproceso son signicativamente pequeos comparados con otros mtodos existentes. Debido a la cantidad de informacin
y detalle que se almacena en cada HORI, el coste computacional del manejo
de los HORI en escenas complejas es razonablemente pequeo.
Por ltimo, esta nueva representacin de la escena se puede combinar con
otras representaciones ya existentes basadas en la geometra para mejorar la
calidad de la imagen nal. Por ejemplo, en el caso de las mallas de tringulos,
se podra construir una subdivisin jerrquica de la escena basada en HORI
en la que los nodos hoja de la jerarqua contengan los tringulos interiores
a la regin que representan. De esta forma, si observamos el modelo desde

45

una posicin distante visualizaramos los HORI de los nodos no terminales.


Si nos acercamos mucho a una determinada zona acabaramos visualizando
los tringulos que representan dicha zona, obteniendo as una mejora signicativa en la calidad nal de la imagen.

46

Apndice A
OpenGL y GPUs
A.1.

Introduccin a OpenGL

Application Program Interface ) para el de-

OpenGL [WS03] es una API (

sarrollo de aplicaciones grcas 3D. Existen implementaciones de OpenGL


para casi todas las plataformas (Linux, Windows, MacOS, . . . ), hecho que
hace que OpenGL sea actualmente el estndar ms utilizado en la programacin de aplicaciones 3D.

La interfaz de OpengGL consiste en una biblioteca de unas 250 funciones


C/C++. Aunque la API est especicada en lenguaje C, existen componentes diversos que permiten llamar funciones de OpenGL desde otros lenguajes
como Python, Perl y Java.

Para permitir la visualizacin de una escena 3D, OpenGL proporciona


bsicamente dos tipos de funciones: funciones para dibujar un conjunto de
primitivas grcas, como punto, lneas y polgonos, y funciones para congurar el modo en que estas primitivas grcas se dibujan en la pantalla. Dentro
de este segundo grupo de funciones, OpenGL proporciona mecanismos para
denir una cmara virtual (que determinar desde que punto nos estemos
mirando la escena y por tanto en que regin de la ventana se proyectarn las
primitivas grcas), denir las propiedades pticas de los materiales asociados a las primitivas (como el color), congurar las fuentes de luz que iluminan
la escena, as como congurar otros aspectos (como texturas) para incrementar el realismo de las imgenes.

Un aspecto importante de OpenGL (y que es la clave de su portabilidad)


es que no incorpora ninguna funcin dependiente del sistema de ventanas.

47

A.1. Introduccin a OpenGL


Esto quiere decir que tareas como la gestin de la entrada del usuario, la
gestin de eventos y la creacin y conguracin de las ventanas es un aspecto
externo a OpenGL.

A.1.1. Funcionamiento y esquema bsico de visualizacin


A continuacin se explican algunos aspectos bsicos del funcionamiento
de OpenGL:

Repintado completo de cada frame. En OpenGL, cada nueva imagen se redibuja borrando el contenido de la ventana y volviendo a
dibujar todas las primitivas grcas de la escena. Por tanto, en una
animacin con OpenGL todos los fotogramas se regeneran empezando
con la ventana vaca, sin aprovechar nada del fotograma anterior. Este
hecho es habitual en las aplicaciones 3D porque una variacin (incluso
pequea) del punto de vista hace que cambie prcticamente todo el
contenido de la vista. Para facilitar la animacin se utiliza la tcnica
que se describe en el siguiente punto.

Doble-buering . OpenGL soporta esta tcnica que utiliza dos buers


para almacenar la imagen. Un buer es ledo por el hardware grco

front buer ) mientras

que convierte la imagen en una seal de vdeo (

que el otro buer se utiliza para hacer el repintado de la escena que

back buer ). Habitualmente la

se mostrar en el siguiente fotograma (

API que conecta OpenGL con el sistema de ventanas proporciona una


funcin

swapBuers() que permite intercambiar el front y el back buer

cada vez que se completa el repintado de un fotograma.

Mquina de estados.

OpenGL se comporta como una mquina de

estados: un estado es un conjunto de variables que denen el comportamiento de otros comandos OpenGL. Esto permite utilizar comandos
con un nmero reducido de parmetros. El valor de estas variables se
puede cambiar y consultar mediante instrucciones de OpenGL. El color, el grueso de lnea y las propiedades del material son ejemplos de
variables de estado.
A grandes rasgos, este aspecto nos permite clasicar las funciones de
OpenGL en tres grupos. Un primer grupo estara formado por las funciones
de dibujo (que modican de forma directa el

framebuer ).

Dentro de este

glClear )

grupo estn incluidas las funciones para el borrado de la ventana (

glBegin/glEnd ).

y las funciones para el dibujo de primitivas (

48

Un segundo

A. OpenGL y GPUs
grupo estara formado por todas las funciones que modican el valor de una

contexto grco, en terminologa OpenGL): por ejemplo,


las funciones del tipo glColor*() nos permiten modicar la variable de estado

variable de estado (

que controla el color con que se dibujaran las primitivas. Finalmente, un tercer grupo estara formado por las funciones que permiten consultar el valor
de una variable de estado:

glGet*(), glIsEnabled(), . . .

A continuacin se muestra el esquema de una funcin

paintGL que dibuja

un modelo geomtrico. Esta funcin se encarga de redibujar la escena cada


vez que sea necesario (por ejemplo, porque hemos modicado la cmara virtual):

void paintGL(void)
{
// 1. Borrar el contenido de la ventana
borrar_ventana();
// 2. Definir la cmara, los materiales y otras variables de estado
configurar_estado_OpenGL();
// 3. Dibujar las primitivas que forman el modelo
para cada primitiva p del modelo {
definir_propiedades_visualizacin_primitiva();
dibujar(p);
}
}

A.1.2. Primitivas grcas


OpenGL proporciona diversas primitivas grcas. Estas primitivas se di-

glBegin-glEnd, dentro del cual se proporcionan los diferentes vrtices que denen la geometra. La funcin glBegin() permite escoger

bujan con un bloque

entre diferentes tipos de primitivas:

Tipo de primitiva

Interpretacin de los vrtices

GL_POINTS

Cada vrtice se dibujar como un punto.

GL_LINES

Cada dos vrtices forman un segmento.

GL_LINE_STRIP

Los vrtices forman una poligonal abierta.

GL_LINE_LOOP

Los vrtices forman una poligonal cerrada.

GL_TRIANGLES

Cada tres vrtices denen un tringulo.

GL_QUADS

Cada cuatro vrtices denen un cuadriltero.

GL_POLYGON

Los vrtices se dibujan como un polgono.

49

A.1. Introduccin a OpenGL

A.1.3. Transformaciones geomtricas con OpenGL


OpenGL incorpora una serie de funciones para aplicar translaciones, rotaciones y escalados a los objetos de la escena. Estas funciones son:

glTranslate*(), glRotatef*(), glScale*()


que normalmente se utilizan conjuntamente con otras funciones relacionadas
con matrices:

glMatrixMode(), glLoadIdentity(), glPushMatrix(), glPopMatrix()


Las implementaciones de estas funciones aprovechan la aceleracin hardware que proporciona la placa grca, por tanto es la forma ms eciente de
aplicar transformaciones geomtricas a las primitivas grcas de OpenGL.

Modelview y projection
OpenGL mantiene en todo momento dos matrices que conjuntamente
indican el paso de coordenadas del objeto a coordenadas normalizadas:
GL_MODELVIEW y GL_PROJECTION.
La forma de utilizar estas matrices es muy sencilla e implica dos tipos de
operaciones:
1. Denir el valor de cada una de las dos matrices.
2. Utilizacin de estas matrices para transformar los objetos de la escena.
Para denir el valor de cada matriz es necesario:
Indicar con

glMatrixMode() cual de las dos matrices vamos a modicar

(matriz activa).

glLoadIdentity, glLoad(glTranslate, glRotate, glScale, etc) la

Indicar el valor con el cual se tiene que cargar (

Matrix )

o se debe multiplicar

matriz activa.
La utilizacin de las matrices para transformar los objetos de la escena es
automtica: cada vez que le pasamos un vrtice a OpenGL, ste se multiplica
primero por la matriz GL_MODELVIEW (obteniendo el vrtice en coordenadas del observador) y despus se multiplica por la matriz GL_PROJECTION
(obteniendo el vrtice en coordenadas normalizadas).

50

A. OpenGL y GPUs
Finalmente, se pasa de coordenadas normalizadas a coordenadas de viewport, mediante la llamada transformacin del viewport. La denicin del

glViewport(x, y,
(x, y) es la esquina superior izquierda del viewport en coordenadas pantalla y (cx, cy) corresponden a la anchura y altura del viewport

viewport se realiza de manera sencilla mediante la funcin

cx, cy),

donde

deseado.

Figura A.1:

A.2.

Pipeline

de OpenGL

Programacin de la GPU

En esta seccin se explican las ventajas que aportan las tarjetas grcas
de ltima generacin en la

renderizacin

de grandes cantidades de datos. En

la siguiente tabla, se puede observar el aumento de prestaciones que se han


realizado en las tarjetas grcas NVIDIA.

Generacin

Ao

Nombre

Primera

Fin. 1998

RIVA TNT

pxeles pintados por


gundo

se-

50M

polgonos

renderizados
por segundo

6M

Primera

Princ. 1999

RIVA TNT2

75M

9M

Segunda

Fin. 1999

GeForce 256

120M

15M

Segunda

Princ. 2000

GeForce2

200M

25M

Tercera

Princ. 2001

GeForce3

800M

30M

Tercera

Princ. 2002

GeForce4Ti

1200M

60M

Cuarta

Princ. 2003

GeForceFX

2000M

200M

Antes de la aparicin de la GPU (

Graphics Processor Unit ), las tarjetas

grcas nicamente disponan de un limitado espacio de memoria llamado

51

A.2. Programacin de la GPU


frame buer

Computer Processor Unit )

o memoria de vdeo donde la CPU (

escriba directamente los datos que codicaban las imgenes que se queran
mostrar por pantalla despus de haber realizado todos los clculos pertinentes.
Con la aparicin de las GPUs de primera generacin se consigui descargar a la CPU de parte del proceso de visualizacin, que en este punto
se encargaba de las transformaciones geomtricas mientras que la GPU se
encargaba de toda la parte de rasterizacin de polgonos.
Las GPUs de segunda generacin realizaban todos los clculos del proceso de visualizacin. Eran capaces de realizar tanto las transformaciones
geomtricas como todo el proceso de rasterizacin. De este modo la CPU
se encargaba nicamente de gestionar los datos que la GPU necesitaba para
llevar a cabo la visualizacin 3D.
Con la aparicin de las GPUs de tercera generacin surgi el concepto

de

shader. Bsicamente los shaders

permiten programar parte del proceso de

visualizacin que realiza la GPU. En esta generacin de GPUs se podan programar las transformaciones geomtricas. Estos programas reciben el nombre
de

vertex shaders

vertex program.

La ltima generacin de tarjetas grcas que existe hasta el momento permite programar tanto las transformaciones geomtricas como el proceso de

vertex program se aaden los fragment program, fragment


shader o pxel shader con los cuales se puede programar tanto la coloracin,

rasterizacin. A los

iluminacin o texturacin de los pxeles que van a aparecer por pantalla.


Existen varios lenguajes de programacin dedicados a la programacin de

for graphics ), HLSL (High Level Shading


Language ) o GLSL (OpenGL Shading Language ). Este ltimo ser el utilizado para programar los shaders requeridos por la aplicacin que desarrolla
GPUs. Algunos de ellos son Cg (C

este proyecto.

A.2.1.

Shaders

hardware compatible con DirectX 8 (GeForce 2 y anteriores, Radeon 7000 y anteriores) el pipeline grco slo poda ser congurado, pero no
Hasta el

programado. Por ejemplo en OpenGL existe un modelo de iluminacin con


luz ambiente, difusa, especular y de emisin aunque existen muchos otros mo-

52

A. OpenGL y GPUs
delos de iluminacin. Sin la utilizacin de

shaders

no se podra usar ningn

otro modelo de iluminacin con OpenGL, pero gracias a ellos se puede escribir
un modelo de iluminacin propio. Esto es slo un ejemplo de lo que permite

environment
mapping, iluminacin por pxel, bump mapping, parallax bump mapping, . . .
el uso de

Un

shaders

shader

pero existen miles de posibilidades: sombras,

es bsicamente un programa que se ejecuta en la GPU, escrito

en uno de los lenguajes de


dos tipos de

shaders :

shading

Vertex shader : shader

existentes: Cg, GLSL, HLSL, . . . Existen

que opera con cada uno de los vrtices. Cada

vez que es llamada la funcin

shader

glVertex

(o

glDrawArrays, . . . ) el vertex
vertex shader se

es ejecutado para cada vrtice. Utilizando el

obtiene un control total sobre las transformaciones geomtricas que se

vertex shader el conjunto de transformaciones geomtricas que por defecto


aplica el pipeline grco de OpenGL quedar deshabilitado ya que saplican a cada vrtice. Hay que tener en cuenta que si se utiliza un

te est siendo reprogramando, de tal modo que se tendrn que incluir


explcitamente en el cdigo del

shader.

Algunas de las caractersticas

geomtricas sobre las que se obtiene control son:

Transformaciones de los vrtices.

Transformaciones de las normales.

Normalizacin y escalado.

Iluminacin.

Generacin y transformacin de coordenadas de textura.

Fragment shader :

un

fragment shader

opera con cada fragmento pro-

ducido por rasterizacin. Un fragmento es un pxel potencial que puede


llegar ha ser pintado en pantalla si pasa todos los tests habilitados de
OpenGL. De la misma manera que pasaba con el

vertex shader,

un

fragment shader sustituye todas las operaciones por defecto de fragmento del pipeline de OpenGL. Algunas de las funciones sobre las que
se obtiene control o efectos que se pueden crear son:

Acceso y aplicacin de las texturas.

Control del color de cada fragmento.

Modicacin del

Niebla.

Sombras.

buer

de profundidad.

53

A.2. Programacin de la GPU


En la siguiente gura se pueden observar los caminos que siguen cada uno
de los datos en la tarjeta grca antes de ser enviados al

Figura A.2:

frame buer :

Pipeline de las tarjetas grcas actuales

GLSL
A continuacin se explicar ms detalladamente el uso de

shaders

en el

lenguaje GLSL [KBR06] ya que es el utilizado en este proyecto para crear el

fragment shader

encargado de realizar el clculo de la interseccin entre el

rayo de visin y el

relief map.

Existen cuatro tipos bsicos de datos en GLSL:

Float.
Integer.
Boolean.
Sampler

(texturas): Pueden ser 1D, 2D o 3D.

Por otra parte se pueden declarar vectores y matrices de dos, tres y cuatro
componentes de los tres primeros tipos bsicos.
Existen tres tipos de parmetros de entrada o de salida en los

54

shaders :

A. OpenGL y GPUs
Uniform : Son parmetros cuyo valor no cambia durante toda la renderizacin, como por ejemplo la posicin de la luz o su color. Estn
disponibles tanto para vertex shaders como fragment shaders y son
slo de lectura.

Atribute : Son parmetros de entrada slo disponibles en los vertex shaders y su valor cambia para cada vrtice, como por ejemplo las coordenadas del mismo. Son slo de lectura.

Varying : Sirven para pasar valores del vertex shader al fragment shader. En el vertex shader son parmetros de escritura mientras que en
el fragment shader son slo de lectura. Se deben declarar con el mismo
nombre en los dos shaders para que el paso de datos sea correcto.
Alguna de las funciones denidas para acceder a valores absolutos del

renderizado

en GLSL son las siguientes:

gl_Vertex : vector 4D que representa la posicin del vrtice.


gl_Normal : vector 3D que representa la normal del vrtice.
gl_Color : vector 4D que representa el color del vrtice.
gl_MultiTexCoordX :

vector 4D que representa la coordenada de tex-

tura de la textura X.

gl_ModelViewMatrix : matriz ModelView

de 4x4.

gl_ModelViewProjectionMatrix : matriz de 4x4 que representa la matriz


ModelView multiplicada por la matriz Projection.
gl_NormalMatrix : Matriz de 3x3 que representa la inversa de la matriz
ModelView, usada para transformaciones de

transpuesta de la matriz
las normales.

gl_FrontColor : vector 4D que representa el color frontal de una primitiva.

gl_BackColor : vector 4D que representa el color trasero de una primitiva.

gl_Position : vector 4D que representa la posicin nal del vrtice despus de ser procesado.

55

A.2. Programacin de la GPU


gl_FragColor : vector
frame buer.

4D que representa el color nal que ser escrito

en el

gl_FragDepth : Float

que representa la profundidad escrita en el

buer

de profundidad.

Para poder utilizar

shaders en una aplicacin OpenGL en necesario seguir

los siguientes pasos:

GLhandleARB : representan los vertex y fragment shaders y el programa que los contendr y se ejecutar en el pipeline gr-

Declarar objetos
co.

Crear los objetos

shaders con la funcin glCreateShaderObjectARB

pa-

sando como parmetro GL_VERTEX_SHADER_ARB o


GL_FRAGMENT_SHADER_ARB segn el tipo de

shader

que se

desee crear.
Pasar el cdigo fuente a los

shaders con la funcin glShaderSourceARB


glCompileShaderARB.

y compilarlos con el mtodo

glCreateProgramObjectARB, aadirle los shaders con la funcin glAttachObjectARB, linkar el programa


con glLinkProgramARB y hacer saber a OpenGL que se va ha cambiar
el pipeline grco con la funcin glUseProgramObjectARB.

Crear el programa objeto mediante

Si se quieren pasar parmetros desde la aplicacin principal OpenGL

shaders es necesario reservar una localizacin para estos con la


funcin glGetUniformLocationARB indicando el nombre que tendr el
parmetro dentro del shader y darle valor durante la ejecucin del programa principal con glUniform{1,2,3,4}{s,f,d}[v]ARB.
a los

56

Apndice B
Fragment shader
// Representacin del impostor
//
//
//
//
//
//

V2----------V3
|
|
|
|
|
|
|
|
V0----------V1

struct Impostor
{
sampler2D sampler0; //
sampler2D sampler1; //
vec3 normal;
//
vec3 u;
//
vec3 v;
//
vec3 p0;
//
float lu;
//
float lv;
//
vec2 depthFactor;
//
float range; // zfar // con la
};

textura con color y profundidad (RGBZ)


textura con normal (RGB)
normal del impostor (world space)
vector unitario en la direccion V1-V0
vector unitario en la direccion V2-V0
vrtice del impostor con coords st = (0,0)
mdulo V1-V0
mdulo V2-V0
factor
znear de la cmara
que se ha capturado el impostor

varying vec3 coord; // coordenadas del fragmento


uniform
uniform
uniform
uniform

Impostor impostor; // impostor a renderizar


vec3 eye; // coordenadas del punto de vista
vec3 dir; // direccin de visin (para cmara axonometrica)
bool normalCompressed; // indica si la normal esta comprimida
57

uniform bool renderNormal; // indica si debe pintarse la normal


uniform bool renderORIs; // indica si se estan renderizando
// los oris para calcular otros oris
void addDirectionalLight(int i, vec3 normal,
inout vec4 ambient,
inout vec4 diffuse,
inout vec4 specular)
{
float nDotVP;
// normal . light direction
float nDotHV;
// normal . light half vector
float pf;
// power factor
nDotVP = max(0.0, dot(normal,
normalize(vec3(gl_LightSource[i].position))));
nDotHV = max(0.0, dot(normal, vec3(gl_LightSource[i].halfVector)));
if (nDotVP == 0.0)
pf = 0.0;
else
pf = pow(nDotHV, gl_FrontMaterial.shininess);

ambient += gl_LightSource[i].ambient;
diffuse += gl_LightSource[i].diffuse * nDotVP;
specular += gl_LightSource[i].specular * pf;

vec4 light(vec4 preShadedColor, vec3 normalSCO)


{
// Inicializar acumuladores
vec4 amb = vec4(0.0);
vec4 diff = vec4(0.0);
vec4 spec = vec4(0.0);

// Calcular la contribucin de cada luz


for (int i = 0; i < 1; i++)
{
addDirectionalLight(i, normalSCO, amb, diff, spec);
}
return amb*preShadedColor + diff*preShadedColor + spec;

58

B. Fragment shader
//
//
//
//
//

Interseccin del rayo de visin con el relief map


Primero se realiza una bsqueda lineal para encontrar el primer
punto dentro del objeto. Despus se realiza una bsqueda binaria
para encontrar un punto ms cercano a la superficie
Se asume que la textura tiene 0.0 para near y 1.0 para far

void ray_intersect_binary_search(sampler2D sampler, vec2 dp, vec2 ds,


out float best_depth, out float best_depth_outside)
{
const int linear_search_steps = 16;
const int binary_search_steps = 8;
float depth_step = 1.0 / float(linear_search_steps);
float size = depth_step; // tamao de la ventana de bsqueda
float depth = 0.0; // profundidad de la interseccin encontrada
// mejor profundidad encontrada (empezamos con la ltima posicin)
best_depth = 1.0; // dentro
// aqu se comprueba si estamos dentro del relief map real
// o estamos dentro de la extensin virtual de la textura
if (dp.x < 0.0)
{
if (ds.x > 0.0) depth = (- dp.x/ds.x);
else discard;
}
if (dp.y < 0.0)
{
if (ds.y > 0.0) depth = max(depth, (- dp.y/ds.y));
else discard;
}
if (dp.x > 1.0)
{
if (ds.x < 0.0) depth = max(depth, ((1.0-dp.x)/ds.x));
else discard;
}
if (dp.y > 1.0)
{
if(ds.y < 0.0) depth = max(depth, ((1.0-dp.y)/ds.y));
else discard;
}
59

// bsqueda lineal front-to-back hasta el primer


// punto dentro del objeto sabemos que un texel
// est dentro del objeto si su Z es <= que la depth actual
bool found = false;
for ( int i=0; i<linear_search_steps && !found ;i++)
{
depth += size; // avanzamos por los texels
vec2 newTexel = dp+ds*depth;
if (newTexel.s<=1.0 && newTexel.s>=0.0 &&
newTexel.t<=1.0 && newTexel.t>=0.0)
{
vec4 t= texture2D(sampler,newTexel);
if (t.a <= depth) // dentro
{
found = true;
best_depth=depth; // guardamos la mejor
// profundidad hasta el momento
}
}
else discard;
}
best_depth_outside = depth-size;
// si no hemos encontrado uno dentro, no dibujamos el fragmento
if (!found) discard;
depth = best_depth; // empezamos por el interior
// bsqueda binaria alrededor de la profundidad encontrada (depth)
// para encontrar un punto ms cercano a la superficie
for ( int i=0; i<binary_search_steps;i++)
{
size*=0.5; // busqueda binaria
vec2 newTexel = dp+ds*depth;
vec4 t=texture2D(sampler,newTexel);
if (t.a <= depth) // si sigo dentro, disminuyo best_depth
{
best_depth = depth; // mejor profundidad dentro
depth -= 2.0 * size;
}
else
best_depth_outside = depth;

60

B. Fragment shader

depth+=size;

void main()
{
// 1. Calcular la direccin de visin del fragmento
vec3 v;
if (!renderORIs)
v = normalize(coord - eye);
else
v = dir;
// 2. Obtener componentes de v respecto a la base del plano
vec3 vp = normalize(vec3(dot(impostor.u, v),
dot(impostor.v, v), -dot(impostor.normal, v)));
// 3. Texel inicial
vec2 startTexel = gl_TexCoord[0].st;
// 4. Direccin de avance en espacio textura
// se divide por vp.z para que,
// dir*lambda est a distancia lambda del plano
vec2 dir = impostor.depthFactor * vp.xy / vp.z;
// 5. Determinar profundidad de la interseccin
float d_in, d_out;
ray_intersect_binary_search(impostor.sampler0,
startTexel, dir, d_in, d_out);
vec2 st_in = startTexel + d_in*dir;
vec2 st_out = startTexel + d_out*dir;
vec4 color_in = texture2D(impostor.sampler0, st_in);
vec4 color_out = texture2D(impostor.sampler0, st_out);
// si el salto es demasiado grande, es una pared 0.05
const float jump = 0.05;
if ((color_out.a - color_in.a) > jump) discard;
// Determinar coords st del texel
// que contiene el color el fragmento
vec2 st;
61

vec4 color;
if (abs(color_in.a - d_in) < abs(color_out.a - d_out))
{
st = st_in;
color = color_in;
}
else
{
st = st_out;
color = color_out;
}
// Si el color es el color de fondo
// de la textura descartamos el fragmento
if (color == vec4(1.0, 1.0, 1.0, 1.0)) discard;
// Calcular normal a la superficie
vec3 surfaceNormal;
if (normalCompressed) // Normal comprimida 3dc
{
vec2 uv = st;
uv.y *= -1.0;
surfaceNormal.xy = (texture2D(impostor.sampler1, uv).xy * 2.0) - 1.0;
surfaceNormal.z = sqrt(1.0 - dot(surfaceNormal.xy, surfaceNormal.xy));
}
else
{
surfaceNormal = texture2D(impostor.sampler1, st).xyz;
surfaceNormal = surfaceNormal*2.0 - vec3(1.0, 1.0, 1.0);
}
// Clculo de la profundidad del fragmento (z)
float z;
// Perturbar la Z segn el ngulo entre la normal
// de la superficie y la normal del impostor
float cos = dot(normalize(surfaceNormal) , normalize(impostor.normal));
float k = 1.0/32.0; //32.0/256.;
float zmod = color.a - k*cos;
// pto es el punto sobre el plano ms prximo
// a la interseccin con la superficie, en SCA
// Q es el pto de interseccin rayo-superficie,
// primero en SCA, luego en clipping space
62

B. Fragment shader
vec3 pto = impostor.p0 + impostor.lu*st.s*impostor.u +
impostor.lv*st.t*impostor.v;
vec4 Q = vec4(pto - (zmod * impostor.range)*impostor.normal, 1.0);
Q = gl_ModelViewProjectionMatrix * Q;
z = ((Q.z/Q.w)+1.0)/2.0;
gl_FragDepth = z;

if (renderNormal)
gl_FragColor = texture2D(impostor.sampler1, st);
else
{
if (!renderORIs)
color = light(color, gl_NormalMatrix*surfaceNormal);
gl_FragColor = color;
}

63

64

Referencias
+
[ABB 07] Carlos Andjar, Javier Boo, Pere Brunet, Marta Fairn, Isabel
Navazo, Pere Pau Vzquez, and Alvar Vinacua. Omni-directional

Computer Graphics Forum (accepted for publication), 26(3): to be presented at Eurographics 2007.
relief impostors.

[AL99]

Daniel G. Aliaga and Anselmo Lastra. Automatic image place-

SIGGRAPH '99:
Proceedings of the 26th annual conference on Computer graphics
and interactive techniques, pages 307316, New York, NY, USA,
ment to provide a guaranteed frame rate.

In

1999. ACM Press/Addison-Wesley Publishing Co.


[BD06]

Lionel Baboud and Xavier Dcoret.


relief textures. In

Rendering geometry with

Graphics Interface '06, 2006.

+
[CMR 99] P. Cignoni, C. Montani, C. Rocchini, R. Scopigno, and M. Tarini.
Preserving attribute values on simplied meshes by resampling
detail textures.
[GM04]

The Visual Computer, 15(10):519539, 1999.

Enrico Gobbetti and Fabio Marton.

Layered point clouds: A

simple and ecient multiresolution structure for distributing and


rendering gigantic point-sampled models.

hics (Pergamon), 28(6):815826, 2004.

Computers and Grap-

Compilation and indexing

terms, Copyright 2006 Elsevier Inc. All rights reserved.


[GM05]

E. Gobbetti and F. Marton.

Far voxels: a multiresolution fra-

mework for interactive rendering of huge complex 3d models on


commodity graphics platforms.

2005, 24(3):878885, 2005.

[Hop96]

Proceedings of ACM SIGGRAPH

SIGGRAPH '96: Proceedings of the 23rd annual conference on Computer graphics and
interactive techniques, pages 99108, New York, NY, USA, 1996.
Hugues Hoppe. Progressive meshes. In

ACM Press.

65

REFERENCIAS

[JWP05]

Stefan

Jeschke,

Michael

Wimmer,

and

Werner

Purgathofer.

Image-based representations for accelerated rendering of complex


scenes. In

STAR Proceedings of Eurographics 2005,

pages 120,

Dublin, Ireland, September 2005. Eurographics Association. Eurographics 05 STAR.


[KBR06]

John Kessenich, Dave Baldwin, and Randi Rost.

[lmv]

The OpenGL

Laboratorio de modelizacin virtual de la ciudad,

Shading Language, september 2006.

http://www.upc.edu/cpsv/lmvc/index.htm.

+
[LWC 02] David Luebke, Benjamin Watson, Jonathan D. Cohen, Martin
Reddy, and Amitabh Varshney.

Level of Detail for 3D Graphics.

Elsevier Science Inc., New York, NY, USA, 2002.


[PO06]

Fabio Policarpo and Manuel M. Oliveira. Relief mapping of non-

I3D '06: Proceedings of the 2006


symposium on Interactive 3D graphics and games, pages 5562,
height-eld surface details. In

New York, NY, USA, 2006. ACM Press.


[POC05]

F. Policarpo, M. M. Oliveira, and J. L. D. Comba. Real-time relief

Proceedings of the 2005


symposium on Interactive 3D graphics and games, pages 155162,
mapping on arbitrary polygonal surfaces.
2005.

[RL00]

Szymon Rusinkiewicz and Marc Levoy. Qsplat: a multiresolution

SIGGRAPH '00:
Proceedings of the 27th annual conference on Computer graphics
and interactive techniques, pages 343352, New York, NY, USA,
point rendering system for large meshes.

In

2000. ACM Press/Addison-Wesley Publishing Co.


[SDB97]

Franois Sillion, George Drettakis, and Benoit Bodelet. Ecient


impostor manipulation for real-time visualization of urban scenery.

In D. Fellner and L. Szirmay-Kalos, editors,

Graphics Forum (Proc. of Eurographics '97),

Computer

volume 16, pages

207218, Sep 1997.


[sta]

Stanford 3d scanning repository,


http://graphics.stanford.edu/data/3dscanrep.

[TCS03]

Marco Tarini, Paolo Cignoni, and Roberto Scopigno.


based methods and assessment for detail-recovery.

66

In

Visibility

VIS '03:

REFERENCIAS

Proceedings of the 14th IEEE Visualization 2003 (VIS'03),

pa-

ge 60, Washington, DC, USA, 2003. IEEE Computer Society.


[VFSH04] Pere-Pau Vzquez, Miquel Feixas, Mateu Sbert, and Wolfgang
Heidrich. Automatic view selection using viewpoint entropy and
its application to image-based modelling.

rum, 22(4):689700, November 2004.


[WS03]

Computer Graphics Fo-

OpenGL Programming Guide:


The Ocial Guide to Learning OpenGL, Version 1.4. Addison-

Mason Woo and David Shreiner.

Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2003.


[YSGM05] S. E. Yoon, B. Salomon, R. Gayle, and D. Manocha.

Quick-

vdr: out-of-core view-dependent rendering of gigantic models.

IEEE Transactions on Visualization and Computer Graphics,


11(4):369382, 2005.

67

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