ocultamiento de superficies

28
2010 Montero Onofre Alex Alfaro Yangaly Hugo Zarate Castañeda Etmee Jimenez Aguado Pablo 2010 - I 01/06/2010 OCULTAMIENTO DE SUPERFICIES

Upload: alex-montero

Post on 23-Jun-2015

914 views

Category:

Documents


5 download

DESCRIPTION

Este trabajo tiene como fin aprender tecnicas de ocultamiento de superficies a nivel computacional, es decir identificar algoritmos que permitan ver lo mas real posible una escena teniendo en cuenta parametros los cuales seran decisivos en el momento de la programacion ...

TRANSCRIPT

Page 1: Ocultamiento de Superficies

2010

Montero Onofre Alex

Alfaro Yangaly Hugo

Zarate Castañeda Etmee

Jimenez Aguado Pablo

2010 - I

01/06/2010

OCULTAMIENTO DE SUPERFICIES

Page 2: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

2 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

Indice

1. INTRODUCCION 3

2. CONCEPTO DE COHERENCIA 4

3. CLASIFICACION DE LOS ALGORTIMOS DE OCULTAMIENTO 5

PRECISION A LA IMAGEN 6

PRECISION AL OBJETO 7

4. ALGORITMO DE BACK-FACE CULLING 8

5. ALGORITMO DE WARNOCK 14

6. ALGORITMO DE Z-BUFFER 17

7. ALGORITMO DEL PINTOR 21

8. ALGORITMO DE ÁRBOL BSP 23

9. CONCLUSIONES 27

10. BIBLIOGRAFIA 28

Page 3: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

3 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina3

Introducción

Hasta el momento hemos aprendido como construir y proyectar objetos tridimensionales,

pero siempre se ven todas las partes del objeto. Esto da a nuestros dibujos una cierta calidad

de transparencia. Las figuras que se obtienen de esta forma reciben el nombre de modelos

alámbricos ya que sólo presentan los contornos de objetos supuestamente sólidos. Los

objetos complejos se pueden convertir rápidamente en un enredo de segmentos y curvas sin

sentido. Es difícil identificar que líneas pertenecen a la parte frontal de objeto y cuales están

situadas detrás.

Otra consideración a tomar en cuenta cuando queremos lograr una simulación de carácter

real es que en el mundo real un objeto puede obstaculizar la visualización de otro objeto, es

decir, los objetos pueden interponerse, ocultando la visión de otros.

El problema general consiste en hacer que los objetos se vuelvan opacos en el mundo de los

gráficos tridimensionales y a esto se le denomina eliminación de superficies ocultas.

Este problema no es tan sencillo como cabría pensar en un principio. De hecho, es el más

complejo en términos de programación. Lo que la naturaleza hace con facilidad (y una gran

cantidad de procesamiento paralelo) debemos hacerlo nosotros con un número elevado de

cálculos. Existen varias soluciones para el problema de las superficies y líneas ocultas.

En este apartado veremos las técnicas para eliminar aquellas líneas, curvas o superficies que

estarían ocultas en una escena y así aumentar el realismo de ésta, es decir, veremos

diferentes algoritmos que pueden solucionar este problema y determinar qué curvas o

superficies pueden ser observadas desde un punto de vista dado y cuales no.

Page 4: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

4 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina4

Concepto de Coherencia

Podemos definir la coherencia como el grado en el cual las partes de un entorno muestran

similitudes locales. Esta propiedad se puede aprovechar para aumentar la eficiencia de los algoritmos

ya que permite ahorrar cálculos cuando las propiedades de un objeto varían suavemente. Se han

identificado distintas clases de coherencia:

Coherencia de objeto. Si un objeto está completamente separado de otro, no es necesario

comparar sus componentes (caras, aristas...) entre sí para comprobar si se solapan.

Coherencia de arista. La visibilidad o no de una arista cambia sólo si se cruza con un objeto

visible.

Coherencia de arista implícita. No es necesario calcular todos los puntos de la recta que se

forma cuando dos planos se cruzan, solo son necesarios dos.

Coherencia de línea de barrido (scan-line). Los objetos definidos en el espacio deben ser

llevados a la pantalla en forma de píxeles (scan-conversion), esto se hace por medio de líneas que

barren la imagen (Scan-line). Pues bien, la coherencia reside en el hecho de que la variación de una

línea a otra es pequeña, lo cual se puede tener en cuenta para simplificar las computaciones.

Coherencia de cara. Las propiedades de las caras de los objetos varían suavemente, lo que

permite hacer los cálculos de modo incremental sin tener que hacer esfuerzos innecesarios.

De forma similar a esta última se definen otros tipos de coherencia como la de área y la de

profundidad.

Page 5: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

5 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina5

Clasificacion de los algoritmos de Ocultamiento

Las técnicas y algoritmos de ocultamiento se pueden dividir en dos grupos según el enfoque

que se le dé:

PRECISION A LA IMAGEN (image-precision): Determinar cual de los “n” objetos en la

imagen es el visible en cada pixel. Esto supone un esfuerzo computacional proporcional a

p*n; donde p representa el número de píxeles.

PRECISION AL OBJETO (object-precision): comparar directamente los objetos

eliminando las partes no visibles. De este modo el esfuerzo computacional es proporcional

a n2. Aunque parece menor que en el caso anterior (habitualmente n es menor que p), los

algoritmos son más difíciles de implementar.

Otra diferencia entre ambas aproximaciones reside en el hecho de que los algoritmos de

precisión a la imagen son ejecutados directamente a la resolución del dispositivo de salida

(pantalla, impresora, etc.), mientras que en los otros se realiza el cálculo de modo

independiente, pero es necesario un paso posterior de “traducción” a la resolución deseada.

Debemos añadir que esta división de los algoritmos no es excluyente, ya que existen

algoritmos que combinan cálculos de ambos grupos.

Page 6: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

6 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina6

PRECISION A LA IMAGEN

Se realizan en el sistema de coordenadas de la imagen.

Se determina cual de los “n” objetos es visible en cada uno de los “p” píxeles de la imagen.

Algoritmo

PARA (cada píxel de la imagen) {

Determinar el objeto más cercano al observador que

es atravesado por el rayo proyector a través del

píxel;

Dibujar el píxel con el color apropiado;

}

Se observa que compara todos los objetos con cada píxel, su complejidad es O(n*p)

Este algoritmo depende del dispositivo utilizado y el tamaño de la ventana. Al cambiar la

cantidad de píxeles se deben rehacer los cálculos.

Algoritmos: Z Buffer, Warnock, Scan-Line , Back-Face Culling

Los algoritmos de precisión de imagen se hicieron para sistemas gráficos de barrido.

Page 7: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

7 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina7

PRECISION AL OBJETO

Realizan el proceso de cálculo en el sistema de coordenadas del objeto.

Se compara directamente cada objeto con el resto de los elementos, eliminando objetos enteros,

también partes no visibles del objeto.

Algoritmo

PARA (cada objeto de la escena) {

Determinar aquellas partes del objeto

cuya vista no esta obstruida por:

el mismo objeto;

otro objeto;

Dibujar esas partes con el color apropiado;

}

Vemos que cada objeto se compara con el resto, su complejidad es O(n2).

No se considera la resolución de la pantalla para los cálculos => el dibujo en pantalla es el último

paso.

Algoritmos: algoritmo del Pintor, Algoritmo utilizando el Árbol BSP

Los algoritmos de precisión de objeto se hicieron inicialmente para sistemas gráficos vectoriales.

Page 8: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

8 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina8

ALGORITMOS DE OCULTAMIENTO DE SUPERFICIES

1. SUPERFICIES OCULTAS: BACK FACE RENOVAL (CULLING)

El objetivo de éste código es eliminar superficies no visibles de un objeto y eliminar superficies de un objeto ocultas por otros objetos.

Método Back Face culling:

1. Sirve para determinar las caras de un objeto que están detrás y no son visibles a. Cada cara define un plano que divide el espacio en dos semiespacios, uno 'in' y

otro 'out' b. El subespacio 'in' es aquél en que se encuentra el objeto (al menos la parte del

objeto que tiene a esta cara por frontera con el exterior) c. La cara está detrás respecto de un centro de proyección CP si el CP está en el

semiespacio 'in' (el objeto tapa a la cara) d. La cara está delante respecto del CP si éste se encuentra en el semiespacio 'out'

2. Prefiltro para resto de algoritmos de superficies ocultas: descarta caras que seguro que no son visibles (culling)

a. Si back face indica que una cara está detrás, la cara no es visible b. Si back face indica que una cara está delante, puede que esté oculta si el objeto no

es convexo o si tiene otro objeto delante 3. Poco costoso.

Algoritmo back face:

1. Calcular la normal a cada cara que apunta hacia afuera del objeto (hacia el semiespacio 'out')

Page 9: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

9 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina9

2. Estudiar signo del coseno del ángulo entre la normal a la cara y la dirección de proyección

(va del objeto hacia el centro de proyección): a. Si es > 0, la cara está delante y no se descarta (puede que sea visible)

(el centro de proyección y están en el mismo semiespacio: el 'out') b. Si es < 0, la cara está detrás y se descarta (no visible)

(el centro de proyección está en semiespacio 'in' y está en semiespacio 'out') c. Si es = 0, la cara está de canto y se descarta (si es visible, se reducirá a una arista

que de todas maneras aparecerá al proyectar una cara vecina)

Cálculo de la normal:

1. En 2D a. Se ordenan vértices en dirección antihorario. b. Normal a una arista se calcula como producto vectorial de vector de la arista con

vector unitario de eje OZ c. Ejemplo: Si tenemos un polígono de vértices A B C D (sentido antihorario), la

normal a la arista AB es:

2. En 3D a. Se ordenan vértices de cada cara en sentido antihorario vistos desde fuera del

objeto b. Normal a la cara es el producto vectorial de dos aristas consecutivas c. Ejemplo: Si una de las caras del objeto tiene los vértices A B C (en sentido

antihorario vistos desde fuera del objeto), la normal a la cara ABC es, por ejemplo:

Cálculo del signo del coseno del ángulo entre la normal y la dirección de proyección

1. Basta estudiar el signo del producto escalar :

2. Obtención de la dirección de proyección a usar:

Page 10: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

10 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

0

a. El vector va del objeto hacia el centro de proyección b. Si el centro de proyección CP = (Cx,Cy,Cz,0) es un punto impropio, coincide con CP

c. Si el centro de proyección CP = (Cx,Cy,Cz,Cw) es un punto propio (Cw no es cero),

es el vector que va de uno de los vértices de la cara (p.ej., el punto A) al centro de proyección:

Observaciones:

1. Se puede hacer back face antes del prewarping: ahorra proceso de proyección 2. Si se hace prewarping, el signo del producto escalar es el signo de la coordenada Z de la

normal a la cara (tras prewarping, la proyección es ortográfica con dirección/CP (0,0,1,0))

3. No es preciso normalizar las normales (hacerlas unitarias), aunque este cálculo viene bien para otros algoritmos (iluminación)

4. En el cálculo de la dirección de proyección para CP propios, da igual el vértice de la cara

escogido (relación con distancia de punto a plano del producto ) 5. Otra forma alternativa de cálculo del signo:

1. Si Ax+By+Cz+D=0 es la ecuación del plano de la cara y 2. (A, B, C) es un vector normal a la cara apuntando hacia afuera 3. entonces el signo a estudiar es el de ACx+BCy+CCz+DCw (relación con distancia de

punto a plano)

Back face culling (también llamado eliminación del enfrentamiento trasero)

La forma más simple de eliminar polígonos innecesarios es eliminar todos aquellos que el

observador no puede ver. Esto se conoce como back face culling. Ya que la mayoría de los

objetos 3D son completamente cerrados, los polígonos no enfrentados al observador están

siempre bloqueados por polígonos que sí lo están, excepto cuando el observador está dentro del

Page 11: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

11 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

1

objeto. El enfrentamiento de un polígono esta definido por el winding u orden en el que sus

vértices se envían al renderizado. Un renderizado puede definir un winding en el sentido de las

agujas del reloj o contrario como enfrentamiento hacia el frente o hacia atrás. Una vez que un

polígono se transformó a un espacio en la pantalla, su winding puede ser verificado y si esta en la

dirección opuesta, no es dibujado. Por su puesto, back face culling no puede ser usado con

volúmenes abiertos o degenerados.

Estructuras de datos espaciales:

Técnicas más avanzadas usan estructuras de datos para eliminar objetos que están fuera del

volumen visible o tapados por otros objetos. Las estructuras de datos más comunes son

particionado binario del espacio, y eliminación de celda y portal.

Mejoras posteriores:

Si bien el proceso de rasterización básico hace décadas que se conoce, las aplicaciones modernas

siguen haciendo optimizaciones y adiciones para aumentar el rango de posibilidades del motor

de rasterización.

Filtrado de texturas:

Las texturas son creadas a resoluciones específicas, pero ya que la superficie en donde están

aplicadas puede estar a cualquier distancia del observador, estas pueden mostrarse en tamaños

arbitrarios en la imagen final. Como resultado, un píxel en la pantalla usualmente no

corresponde directamente a un texel. Alguna técnica de filtrado debe ser aplicada para lograr

imágenes claras a cualquier distancia. Hay varios métodos, con diferentes relaciones entre

calidad de imagen y complejidad computacional.

Environment mapping (mapeado del entorno):

El mapeado del entorno es una forma de mapeado de texturas en la cual las coordenadas de la

textura son dependientes de la vista. Una aplicación común, por ejemplo, es simular reflejo en

un objeto con brillo. Uno, por ejemplo, se puede mapear el entorno de un cuarto a una copa de

metal, como el observador se mueva alrededor de la copa, las coordenadas de la textura en los

vértices de la copa se mueven proporcionalmente, dando la ilusión de metal reflectivo.

Bump mapping (mapeado de imperfecciones, golpes, rugosidad):

Bump mapping es otra forma de mapeado de textura que no provee a los píxeles de color sino de

profundidad. Especialmente con píxel shaders modernos, bump mapping crea la sensación de

rugosidad dependiente de la luz y el punto de vista en una superficie para aumentar el realismo.

Nivel de detalle (LOD):

En muchas aplicaciones modernas, el número de polígonos en una escena puede ser

impresionante. Sin embargo, un observador en una escena solo podrá discernir detalles de

Page 12: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

12 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

2

objetos cercanos. Los algoritmos de nivel de detalle varían la complejidad de la geometría en

función de la distancia al observador. Los objetos justo enfrente del observador pueden ser

mostrados en su completa complejidad mientras que los objetos que están más lejos pueden ser

simplificados dinámicamente.

Sombras:

Los cálculos de iluminación en el tradicional proceso de rasterización no tienen en cuenta la

obstrucción de objetos. El mapeado de sombras y el mapeado de volúmenes de sombras son dos

técnicas comunes modernas para crear sombras.

Aceleración por hardware:

Comenzando en los 90', la aceleración por hardware para consumidores normales de

computadoras de escritorio se ha convertido en la norma. Mientras que los programadores

gráficos se habían más tempranamente basado en ensamblador codificado a mano para que sus

programas funcionen más rápido, la mayoría de los programas modernos están escritos para

funcionar a través de una de las existentes APIs gráficas, las cuales manejan a la GPU.

Las últimas GPUs poseen soporte para Píxel Shaders programables los cuales mejoran

drásticamente las posibilidades de los programadores. La tendencia está apuntada a la completa

programabilidad de la pipeline (tubería, conducto) gráfica.

Procesador de imágenes rasterizadas:

Un procesador de imágenes rasterizadas, o RIP, es un dispositivo que se usa en los sistemas de

impresión para producir una imagen de mapa de bits. Posteriormente, el bitmap generado por el

procesador se envía a un dispositivo de impresión. La entrada de datos en el RIP puede ser una

página generada en un lenguaje de descripción de página de de alto nivel como puede ser

PostScript, PDF (del acrónimo inglés portable Document Format) o XPS. También puede ser otro

bitmap de un dispositivo cuya salida es enviada a la entrada del RIP. En última instancia, el

dispositivo RIP aplica algoritmos de interpolación y suavizado sobre el bitmap de entrada para

generar el bitmap de salida.

La finalidad del procesamiento para el que se ha concebido un RIP es conseguir una imagen

rasterizada de alta resolución a partir de una información digital vectorial. Inicialmente, los

dispositivos RIPs eran una etapa de la electrónica del hardware que recibía la descripción de la

página a través de una interfaz, (generalmente la RS232) y generaba una salida que

posteriormente se usaba para habilitar o deshabilitar cada píxel en tiempo real del dispositivo de

salida como pudiera ser el escáner de una filmadora de fotolitos.

Inclusive, un RIP se puede implementar en un componente software del sistema operativo o

como un firmware ejecutado en un microprocesador del interior de la impresora. Ghostscript y

GhostPCL son ejemplos de software RIPs. Cada impresora PostScript contiene un RIP en su

Page 13: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

13 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

3

firmware. Los RIPs más recientes guardan la compatibilidad hacia atrás con photosetters por eso

son capaces de soportar lenguajes más antiguos.

Pasos de un RIP:

Interpretación. Este es el paso donde el lenguaje de descripción de página soportado se

transforma en una representación de una página particular. Muchos RIPs procesan

páginas con tanta intensidad que el funcionamiento habitual de la máquina es solo para la

página en curso, es decir, se proceso una sola página cada vez. Una vez que la página se

ha generado se procesa la siguiente.

Renderizado. Proceso a través del cual la representación interna particular se transforma

en un bitmap de tono continuo. Hay que hacer notar que, en la práctica, la interpretación

y el renderizado se hacen juntos con bastante frecuencia. Los lenguajes simples (en su

mayor parte los más antiguos) se diseñaron para trabajar con mínimos requerimientos de

hardware, por eso tienden a ejecutar el renderizado directamente.

Proyección. Para que se imprima, un bitmap de tonos continuos se ha de transformar

previamente en otro de tonos medios (patrones de puntos). Hay dos métodos o tipos

para este paso. La proyección por modificación en la amplitud (AM) y la proyección

estocástica o por modulación en la frecuencia (FM). En la proyección AM, la variación del

tamaño de los puntos depende de la densidad del objeto y sus valores tonales. Los puntos

se colocan en una cuadrícula fija pero son mayores si corresponden a un área de la

imagen de alta densidad. En la proyección FM, el tamaño de los puntos permanece

siempre constante y se ubican en un orden aleatorio para crear áreas de imagen más

claras u oscuras. El emplazamiento de los puntos, y la densidad de estos, se controla a

partir de un sofisticado algoritmo matemático.

Los RIP se usan en las impresoras láser para comunicar las imágenes rasterizadas al láser de

barrido de la impresora.

Page 14: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

14 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

4

2. ALGORITMO DE WARNOCK

Más complejo que Z-buffer, pero no requiere tanta memoria

Se suele usar con caras triangulares para simplificar comprobaciones de solapamiento

Idea es buscar áreas rectangulares de la pantalla que tengan color uniforme: el del fondo o el

de una cara

Procedimiento interno

1. Preproceso semejante al de Z-buffer:

1. matrices de transformación

2. back face

3. clipping

4. prewarping

2. Se transforman las caras a coordenadas de pantalla

3. Se calcula la ecuación del plano correspondiente a cada cara transformada

4. Se tiene lista de rectángulos pendiente de estudio;

se comienza con rectángulo que cubra toda la pantalla

5. Se toma un rectángulo de la lista:

1. Si el rectángulo es del tamaño de un píxel, se obtienen todas las caras

(triangulares) cuya proyección contiene al píxel (el píxel está dentro de su

proyección):

1. Si ninguna cara contiene al píxel, se pinta de color de fondo

2. Si al menos una cara contiene al píxel, se le da el color de la cara más

cercana (|z| menor) en ese punto

2. Si el rectángulo es mayor que un píxel, se obtienen todas las caras cuya

proyección se solapa con el rectángulo:

1. Si ninguna cara se solapa, se rellena el rectángulo con el color de fondo

2. Si el rectángulo se encuentra completamente dentro de la proyección de

una cara, y esta cara es la más cercana de las que se solapan con el

rectángulo, se rellena con el color de esta cara

3. Si no se da ninguno de estos casos, se subdivide el rectángulo

Page 15: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

15 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

5

Comprobaciones de solapamiento

1. Cara P1P2P3, rectángulo dado por l(eft), r(ight), b(ottom), t(op)

1. b(ottom) tiene coordenada Y mayor que top en la pantalla

2. Se calculan xmin = min (x1,x2,x3) , etc.

2. Se realizan las siguientes comprobaciones hasta que se determine el tipo de

solapamiento:

1. Minimax test: Si se cumple alguna de las condiciones siguientes, no hay

solapamiento

1. xmax < l

2. xmin > r

3. ymin > b

4. ymax < t

2. Comprobación de intersección arista rectángulo (solapamiento parcial):

1. Para borde l(eft), si l no está entre x1 y x2, no hay intersección; en caso

contario:

1. Se calcula la Y de intersección con arista P1P2

2. Si la Y de intersección está entre t(op) y b(ottom), hay intersección

2. Si no hay intersección, se repite proceso para resto de aristas y bordes del

rectángulo hasta encontrar intersección

3. Si no hay ninguna intersección, se continúa con siguiente comprobación

4. Si hay intersección, no se comprueba más.

3. Comprobación de triángulo dentro (solapamiento parcial):

1. Si todos los vértices del triángulo dentro de rectángulo, el triángulo está

dentro del rectángulo

2. Se comprueba si uno de los vértices están en zona 'in' respecto de todos

los bordes

4. Comprobación de rectángulo dentro (solapamiento total):

1. Si todos los vértices del rectángulo dentro de triángulo, el rectángulo está

dentro del triángulo

2. Se comprueba si uno de los vértices están en zona 'in' respecto de todas

las aristas

5. Si no, el triángulo y el rectángulo son disjuntos (no hay solapamiento)

Page 16: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

16 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

6

Comprobación de proximidad

1. Se realiza cuando rectángulo está completamente dentro de una cara

2. Se calcula distancia (Z) de las esquinas del rectángulo para los planos de todas las caras

cuya proyección se solapa con rectángulo

1. Si una de las caras tiene distancias menores que todas las demás (la mayor de sus

distancias es menor que cualquiera de las del resto de las caras), esta es la cara

más cercana

2. Si esto no sucede, o si la cara más cercana no incluye al rectángulo por completo,

se subdivide

Observaciones

1. Comprobación de si un punto está en zona 'in' de una arista se realiza de forma

semejante al algoritmo de back face removal: se sustituyen coordenadas del punto en

ecuación de la recta y se ve el signo

(Ax+By+C > 0: out, < 0: in)

2. Cálculo de distancias (coordenada z) se hace de forma semejante a algoritmo de Z-

buffer, a partir de ecuación del plano de la cara

1. No hace falta pasar de coordenadas de pantalla a coordenadas de mundo real

2. Se puede ahorrar una división pasando a una ecuación del plano del tipo (C=1):

Ax+By+z+D=0 ; z = -D-Ax-By

3. Se puede aprovechar información de comprobaciones previas:

1. Si triángulo es disjunto de un rectángulo, también lo es de todas sus subdivisiones

2. Si un triángulo tapa a un rectángulo, también tapa a todas sus subdivisiones

4. Se puede sofisticar la comprobación de proximidad con técnicas semejantes a las del

algoritmo del pintor

1. S' detrás de plano de S

2. S delante de plano S'

Page 17: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

17 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

7

3. El Algoritmo Z-Buffer

Es un método de tipo espacio-imagen; que consiste en que cada vez que realiza el renderizado

verifica que no se haya dibujado antes en la posición del pixel que esté más cerca de la posición

respecto de la cámara.

A diferencia con algoritmo del pintor no es necesario clasificar un número infinito de puntos.

Solo es preciso especificar aquellos que van a ser dibujados, es decir aquellos que corresponden

a los pixeles ubicados en los puertos de visualización donde la magnitud del numero de pixeles es

finita a diferencia de los puntos que se encuentran en la superficie de un polígono.

Entonces lo que hace el Algoritmo Z-Buffer registra que se dibuja en cada pixel del puerto de

visualización, así podríamos estar seguro que se muestran aquellos pixeles que representan los

puntos más cercanos al espectador. Se estaría entonces llevando a cabo una clasificación de

profundidades separada de cada pixel en el área de la pantalla correspondiente al puerto de

visualización.

Page 18: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

18 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

8

Para activarlo utilizando el OpenGL se hará una llamada al:

glEnable (GL_DEPTH_TEST)

Esta llamada le dice al OpenGL que active el este de profundidad. Además, cada vez que se

redibuje la escena, aparte de borrar el buffer de color, hay que borrar el buffer de profundidad, y

eso se realiza con la llamada a:

glClear (GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT).

Por ultimo, y no menos importante, al momento de inicializar OpenGL se le tiene que decir que

cree l buffer de profundidad. Esto se realiza al definir el modo visualización.

Sin Z- Buffer

Con Z-Buffer

Page 19: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

19 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina1

9

Cuando el Algoritmo Z-Buffer funciona correctamente, no aparecen superficies ocultas

transparentadas; Sin embargo, presentan dos inconvenientes: tiempo y memoria (debido a estos

detalles esta función viene implementada en las tarjetas graficas de hardware actuales).

Se requieren de dos areas de memoria para implementar el buffer de profundidad y el buffer de

renovación. El buffer de profundidad se utiliza para almacenar los valores de Z para cada posición

x, y a medida que se realizan las comparaciones en el segundo buffer se almacena los valores de

intensidad de cada posición.

Las profundidades son representadas por los números de cada celda de la matriz que representa

al puerto de visualización de tal manera que el 80 representa al pixel más alejado del observador.

Inicialmente el Z-Buffer se encuentra vacio (cargados con ceros), luego añadimos un polígono de

profundidad constante al buffer vacio y observamos la matriz resultante , luego se añade un

polígono mas de profundidad constante también y con profundidades distintas y observamos los

cambios que sufre cada celda con respecto al valor inicial.

Una implementación del algoritmo seria:

Valores Almacenados por el Z-Buffer

Page 20: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

20 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

0

Void z_Buffer(){

int x, y;

for(y=0;y<YMAX;y++){

for(x=0;x<XMAX;x++){

WritePixel(x,y,color);

WriteZ(x,y,0);

}

}

}

//Este metodo limpia el frame Buffer y el Z-Buffer

//en lo que respecta al eje Z

for (cada poligono){

for(cada pixel en la proyeccion del poligono){

double pz=valor de z en las coordenadas x,y

if(pz>=Read(x,y)){

Write(x,y,pz);

WritePixel(x,y,color del pixel en cordenadas x,y);

}

}

}

//este metodo actualiza el Buffer de renovacion con los valores

//ya comparados en el Z-Buffer

Si algún otro objeto se tiene que renderizar en el mismo pixel la tarjeta grafica realiza las

comparaciones y elije la más cercano al observador. Entonces este valor es guardado en el Z-

Buffer, reemplazando al valor antiguo. Esto permitirá la correcta representación de los objetos.

” LOS OBJETOS CERCANOS OCULTAN A LOS MAS LEJANOS”

Ahora la distribución de la distancia del Z-Buffer no es por igual, para esto existe una variación

del Z-Buffer cuya precisión de los resultados están mejor distribuidos, esta se llama W-Buffer.

Para dibujar una nueva escena, el Z-Buffer deberá limpiarse a un valor definido, normalmente es

1.0 porque este valor es el límite superior para una escala entre 0 y 1. Esto implica que no hay

objetos más alejados en ese punto en el frustum de visión.

La invención de este concepto de Z-Buffer se suele aplicar a Edwin Catmull. Realmente también a

Wolfgang Straber describió esta idea en su tesis doctoral de 1974.

Page 21: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

21 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

1

Algunas Desventajas y Ventajas:

La gran ventaja de este método es que es infalible. No importa lo como sea la imagen,

siempre dará resultados impecables.

Los inconvenientes: la dificultad de programación, la gran cantidad de memoria necesaria

para mantener el buffer de pantalla, y la excesiva lentitud del sistema.

En grandes ordenadores el proceso puede tomar algunos minutos , mientras que en

sistemas caseros , puede tomar horas e incluso días dependiendo de de la complejidad de

la imagen .

Para disminuir en medida la cantidad de memoria necesaria, se ideo el método de la LINEA DEL

EXAMEN que es idéntico al Z-Buffer solo que en vez de almacenar toda la pantalla, se almacena

solo una línea de pixeles de cada vez, tratando únicamente los puntos cuya proyección

pertenecen a las coordenadas del Scan. Y repitiendo el mismo proceso para todas las líneas de

pantalla, se consiguen resultados como el sistema Z-Buffer ; ahora respecto a este método se

requiere de mayor dificultad de programación y tiempos de procesos.

4. Algoritmo del pintor

El algoritmo del pintor es una de las soluciones más simples para el problema de visibilidad en

los gráficos 3D por computadora. Cuando se proyecta una escena de tres dimensiones en un

plano de dos es necesario determinar que polígonos son visibles y cuáles no.

El nombre "algoritmo del pintor" se refiere a un pintor que primero dibuja los elementos lejanos

de una escena y después los cubre con los más cercanos. El algoritmo del pintor ordena todos los

polígonos de una escena en función de su profundidad y después los pinta en ese orden,

pintando encima de las partes que no son visibles y solucionando así el problema de la

visibilidad.

Page 22: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

22 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

2

Se pintan primero las montañas lejanas, seguidas por el prado; finalmente se dibujan los objetos

más cercanos, los árboles.

Los polígonos superpuestos pueden provocar que el algoritmo falle.

El algoritmo puede fallar en determinados casos. En este ejemplo, los polígonos A, B y C están

superpuestos. No es posible determinar qué polígono está por encima de los otros o cuándo dos

se intersecan en tres dimensiones. En este caso, los polígonos en cuestión deben ser cortados de

alguna manera para permitir su ordenación. El algoritmo de Newell propuesto en 1972 da una

solución para cortar dichos polígonos. También se han propuesto numerosos métodos en el

campo de la geometría computacional.

En las implementaciones más básicas, el algoritmo del pintor puede ser poco eficiente, ya que

fuerza al sistema a renderizar cada punto de todos los polígonos visibles, incluso si estos

polígonos están ocultos en la escena final. Esto implica que, en las escenas detalladas, el

algoritmo del pintor puede consumir demasiados recursos.

Estas y otras causas llevaron al desarrollo de las técnicas que emplean el Z-Buffer, que puede ser

vistas como un desarrollo del algoritmo del pintor que resuelve los conflictos de profundidad

píxel por pixel, reduciendo la necesidad de una ordenación por profundidad. Incluso en estos

sistemas, a veces se emplea una variante del algoritmo del pintor. Como las implementaciones

del Z-Buffer generalmente se basan en un buffer limitado de profundidad implementado por

hardware pueden producirse problemas de visibilidad debido a los errores de redondeo,

provocando la superposición en la unión de dos polígonos. Para evitarlo, algunos motores

gráficos implementan el "sobrerenderizado", dibujando los bordes de ambos polígonos en el

orden impuesto por el algoritmo del pintor. Esto significa que algunos pixeles se dibujan dos

veces (como en el algoritmo del pintor normal), pero sólo ocurre en pequeñas zonas de la

imagen y apenas afecta al rendimiento.

Page 23: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

23 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

3

5. Algoritmo BSP (Particion Binaria del Espacio)

Binary space partitioning o Partición Binaria del Espacio (BSP) es un método para subdividir

recursivamente un espacio en elementos convexos empleando hiperplanos. Esta subdivisión da

lugar a una representación de la escena por medio de una estructura de datos del árbol conocida

como árbol de BSP

En diseño por ordenador es deseable que el dibujo de una escena sea correcta y rápida. Una

manera sencilla de dibujar una escena correctamente es el algoritmo del pintor: dibujar primero

lo más lejano y después lo más cercano. Sin embargo, este sistema es muy limitado ya que se

pierde tiempo pintando objetos que más tarde serán tapados por otros.

La técnica del Z-Buffer puede asegurar que las escenas se dibujarán correctamente y que se

eliminará la necesidad de seguir un orden como en el algoritmo del pintor, pero es poco eficiente

en términos de memoria. Los árboles BSP dividen los objetos de forma que el algoritmo del

pintor los dibujará correctamente sin necesidad de emplear un Z-buffer ni de ordenar los objetos

como un simple árbol transversal que los mantenga en el orden adecuado. También sirve como

base para otros algoritmos, como las listas de visibilidad, que buscan evitar dibujar sin necesidad.

El problema es que necesita un pre-procesamiento de la escena, lo que hace difícil e ineficiente

insertar los objetos móviles directamente en el árbol BSP. Esto se suele solucionar empleando

conjuntamente un Z-Buffer, usándolo para unir correctamente los objetos móviles como puertas

y enemigos con el resto de la escena.

Los árboles BSP se emplean normalmente en los videojuegos, especialmente en los de acción en

primera persona y en los que tienen entornos de interior. Probablemente el primer juego que

empleó esta técnica fue Doom (ver motor de Doom para más información sobre la

implementación). Otros usos incluye el Ray tracing y la detección de colisiones

Page 24: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

24 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

4

Definición recursiva del árbol binario

T(S):

Si card(S) = 1:

o T(S) es una hoja, v;

o En la hoja se almacena el objeto (si existe), S(v).

Si card(S) > 1:

o La raíz v de T(S) almacena:

una recta (plano) hv,

conjunto S(v) de objetos contenidos en hv.

o Hijo izquierdo de v: raíz de un árbol T(S-), con S − = {hv- instp S : s ? S}.

o Hijo derecho de v: raíz de un árbol T(S+), con S + = {hv+ instp S : s ? S}.

instp: interceptado

La partición binaria del espacio es un proceso genérico que divide una escena recursivamente en

dos hasta que satisface uno o más requisitos. El método específico empleado varía dependiendo

del objetivo final. Por ejemplo, en un árbol BSP empleado para la detección de colisiones el

objeto original sería dividido hasta que cada parte sea lo suficientemente sencilla como para ser

individualmente comprobada, y en el renderizaje interesa que cada parte sea convexa, de forma

que el algoritmo del pintor pueda ser usado.

El número final de objetos crecerá inevitablemente ya que las líneas y caras que se crucen con el

plano de partición serán divididas en dos, y también es deseable que el árbol final esté

razonablemente balanceado. De hecho, el algoritmo para crear un árbol BSP correcta y

eficientemente es la parte más difícil de implementar. En un espacio de tres dimensiones, se

emplean planos para dividir las caras de un objeto; en un espacio de dos se emplean líneas.

La siguiente imagen ilustra el proceso de partición de un polígono irregular en una serie de

polígonos convexos. Destacar cómo cada paso produce polígonos con menos segmentos hasta

que se llega a F y G, que son convexos y no necesitan mayor partición. En este caso en particular,

la línea de partición se ha tomado empleando vértices existentes del polígono y no se

intersecciona con ninguno de sus segmentos. Si la línea de partición se intersecciona con un

Page 25: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

25 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

5

segmento, o una cara en un modelo tridimensional, el/los segmento/s o cara/s tienen que ser

divididas en dos dado que cada partición debe ser un objeto completo e independiente.

1. A es la raíz del árbol y de todo el polígono. 2. Se divide A en B y C 3. Se divide B en D y E. 4. Se divide D en F y G, que son convexos y se convierten en hojas del árbol.

Dado que la utilidad de un árbol BSP depende de cómo se generó, un buen algoritmo es esencial.

La mayoría de los algoritmos prueban muchas posibilidades para cada partición hasta que se

encuentra un resultado lo suficientemente bueno, y también mantienen la información necesaria

en memoria para poder retroceder en caso de que una rama del árbol no sea satisfactoria y

probar otras opciones. Por eso generar un árbol necesita mucho tiempo de computación.

Árbol que corresponde a la BSP. Cada hoja corresponde a una cara de al subdivisión

final, y el fragmento que hay en esa cara se almacena en la hoja. Cada nodo interno

corresponde a un alinea divisoria, almacenada en el nodo

Page 26: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

26 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

6

Inicialmente, esta idea se propuso para los gráficos 3D por ordenador para incrementar la

eficiencia de renderizado. Otros usos son el procesamiento geométrico con formas, Constructive

Solid Geometry en herramientas CAD, detección de colisiones en robótica y videojuegos 3D, y

otras aplicaciones informáticas que incluyen el manejo de estructuras espaciales complejas. la

eliminación de caras ocultas ya que gracias a los planos divisorios del árbol conoceríamos qué

polígonos están detrás o delante, teniendo solamente que considerar determinadas ramas del árbol

a través de la posición desde la que nos estemos posicionando en él.

El uso más común de los árboles de BSP es probablemente retiro superficial ocultado en tres

dimensiones. Los árboles de BSP proporcionan un método elegante, eficiente para clasificar

polígonos vía una primera caminata del árbol de la profundidad: algoritmo “del pintor delantero” o

Algoritmo del pintor

Page 27: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

27 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

7

Conclusiones

Con las técnicas presentadas podremos representar objetos en tres dimensiones hasta

lograr una visión realista del objeto.

Estos métodos sirven para hacer que en la ventana de visualización no aparezcan los

objetos o las caras que no serían visibles desde el punto de vista del observador.

Antes de elegir el método a realizar se tiene que hacer un análisis del objeto a mostrar.

Se pueden reducir los tiempos de las operaciones de los algoritmos con técnicas de

aceleración.

Concluimos en que el Z-Buffer es el algoritmo más apropiado (eficiencia) cuando tratamos

de dibujar una mayor cantidad de figuras en un determinado escenario. Pero requiere mas

espacio en memoria

Page 28: Ocultamiento de Superficies

COMPUTACION GRAFICA - Ocultamiento de Superficies

28 Universidad Nacional Mayor de San Marcos – FISI

Pág

ina2

8

Bibliografía

http://es.wikipedia.org/wiki/Rasterizaci%C3%B3n

http://arantxa.ii.uam.es/~pedro/graficos/teoria/BackFace/BackFace.htm

http://www.scribd.com/doc/22112172/Ocultamiento

http://www.mieres.uniovi.es/egi/dao/apuntes/ocultamiento.html

http://www.google.com.pe/url?sa=t&source=web&cd=2&ved=0CBgQFjAB

&url=http%3A%2F%2Fseccperu.org%2Ffcatho%2Flib%2Fexe%2Ffetch.php%

3Fid%3Dimage_processing_and_computer_graphics%26cache%3Dcache%2

6media%3Docultamiento_y_relleno.pdf&ei=Oq0zTK7vLYG88gbo0MmjAw&

usg=AFQjCNFNpRW6DpSNISZ-sF_Q7QCwnQukpA

http://arantxa.ii.uam.es/~pedro/graficos/teoria/

http://es.wikipedia.org/wiki/Z-buffer

http://arantxa.ii.uam.es/~pedro/graficos/teoria/ScanZBuffer/ScanZBuffer.h

tm

http://es.wikipedia.org/wiki/Algoritmo_del_pintor

http://es.wikipedia.org/wiki/%C3%81rbol_BSP