Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
OCULTAMIENTO DE SUPERFICIES
2010 - I
01/06/2010
Universidad Nacional Mayor de San Marcos – FISI 2
Indice
1. INTRODUCCION 3
2. CONCEPTO DE COHERENCIA 4
PRECISION A LA IMAGEN 6
PRECISION AL OBJETO 7
5. ALGORITMO DE WARNOCK 14
6. ALGORITMO DE Z-BUFFER 17
9. CONCLUSIONES 27
10. BIBLIOGRAFIA 28 2
Página
Introducción
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
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 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
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
PRECISION A LA IMAGEN
Se observa que compara todos los objetos con cada píxel, su complejidad es O(n*p)
PRECISION AL 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
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.
1. Calcular la normal a cada cara que apunta hacia afuera del objeto (hacia el semiespacio
'out')
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
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)
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
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.
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.
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.
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
2. ALGORITMO DE WARNOCK
Más complejo que Z-buffer, pero no requiere tanta memoria
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
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
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
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
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
visualización.
17
Página
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
Por ultimo, y no menos importante, al momento de inicializar OpenGL se le tiene que decir que
Sin Z- Buffer
18
Con Z-Buffer
Página
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
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
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
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
Se pintan primero las montañas lejanas, seguidas por el prado; finalmente se dibujan los objetos
más cercanos, los árboles.
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
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.
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
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.
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
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.
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
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
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.
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