Sei sulla pagina 1di 28

2010

OCULTAMIENTO DE SUPERFICIES

Montero Onofre Alex


Alfaro Yangaly Hugo
Zarate Castañeda Etmee
Jimenez Aguado Pablo

2010 - I
01/06/2010
Universidad Nacional Mayor de San Marcos – FISI 2

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 2
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 3

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.
3
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 4

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.
4 Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 5

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.
5

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

algoritmos que combinan cálculos de ambos grupos.

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 6

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.


6
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 7

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(n 2).
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.
7
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 8

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:


8
Página

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

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 9

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 :


9
Página

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

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 10

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
10

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
Página

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

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 11

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.
11

Nivel de detalle (LOD):


Página

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

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 12

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
12

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
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 13

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.
13
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 14

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
14
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 15

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)
15
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 16

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'
16
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 17

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.

17
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 18

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

18

Con Z-Buffer
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 19

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.

Valores Almacenados por el Z-Buffer

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.
19

Una implementación del algoritmo seria:


Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 20

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.
20

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.
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 21

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.
21
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 22

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.
22
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 23

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
23
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 24

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
24

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
Página

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

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 25

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
25

corresponde a un alinea divisoria, almacenada en el nodo


Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 26

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

26
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 27

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
27
Página

COMPUTACION GRAFICA - Ocultamiento de Superficies


Universidad Nacional Mayor de San Marcos – FISI 28

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
28 Página

COMPUTACION GRAFICA - Ocultamiento de Superficies

Potrebbero piacerti anche