Download Algoritmos de Visibilidad
Document related concepts
no text concepts found
Transcript
Algoritmos de Visibilidad BASADOS EN LA IMAGEN: Para cada pixel en la imagen determinar objeto visto más cercano dibujar pixel al color apropiado. o Z-buffer (coherencia de profundidad) Es el más popular, y es el que viene implementado en la mayoría de las tarjetas gráficas. Usa dos memorias: o Memoria profundidad o Memoria color Pre proceso o Inicialización memorias Proceso o Conversión desordenada de polígonos o Comprobación de cercanía y actualización Características destacables o No precisa ordenación o Maneja todo tipo de escenas o Dimensión de la memoria Algoritmo: Inicializar imagen a color del fondo Inicializar zbuffer a la z de máximo alejamiento Para cada polígono Para cada píxel en la proyección del polígono z:=z(x,y) si z más cercana que zbuffer(x,y) zbuffer(x,y):= z Escribir píxel (x,y) al color conveniente Ventajas del método: o El tiempo de ejecución no depende de la complejidad de la escena, sino sólo de su parte visible. o Puede utilizarse cualquier tipo de objeto o No se necesitan algoritmos de intersección o Óptimo para ser implementado en hardware o Rastreo de Línea Si se intersecta la escena con un plano horizontal, correspondiente a una línea de barrido (scan-line) de la pantalla, y aparecen polígonos 2D. Ahora para esa línea, obtenemos varios intervalos -> SPANS. Para cada span: 1. Si no contiene ningún elemento -> pintamos color de fondo 2. Si sólo contiene 1 segmento -> pintamos del color de ese polígono 3. Si hay más de 1 segmento -> pintamos con el color del más cercano Para calcular cuál, testeamos la componente z en la mitad del span X = (x4 + x5) / 2 Z = f (x, yk) El algoritmo anterior es rápido y potente, pero ineficiente, pues en cada línea de barrido debe calcular la intersección del plano con toda la escena. o Warnock Para decidir sobre pintar o subdividir un área hay 4 casos: 1.- Todos los polígonos son disjuntos respecto al área. Con el color de fondo se puede pintar el área. 2.- Sólo hay un polígono intersecantes o contenido. 3.- Hay un solo polígono que interseca al área y es circundante. 4.- Hay varios polígonos intersecantes, uno de ellos es circundante y está enfrente de los demás polígonos. Esto se controla con los valores z de los polígonos en los 4 vértices del área. Existen estas 4 posibles relaciones entre Polígono y Elemento de Área (o trozo de ventana): Aquí se muestran los puntos de intersección de cada polígono respecto a los 4 vértices del área proyectada: En este caso se subdivide el área. La reacción es diferente al algoritmo de ordenamiento por profundidad, ya que en este no sería necesario subdividir. BASADOS EN LOS OBJETOS: Para cada objeto en la escena determinar partes visibles comparándolo con el resto dibujar partes visibles. o Orden de profundidad Es un procedimiento de resolución automática del problema de visibilidad cuando se conocen las prioridades de cada polígono. Los polígonos se ordenan de menor a mayor prioridad, y se van dibujando en ese orden. El color de cada pixel corresponderá al del polígono dibujado en último lugar. Funciona muy bien cuando se tienen objetos de distinto tipo, cada uno con su propio algoritmo de visibilidad. Conociendo su prioridad relativa, se pueden dibujar por orden, cada uno con su algoritmo. La gran desventaja es que existen pixeles en la imagen que han sido pintados varias veces. La gran ventaja es que no hay que calcular las múltiples intersecciones entre los polígonos de la escena. o Particionamiento Binario del Espacio (BSP) Aquí se tienen 5 objetos. Se toma uno como raíz y se subdivide el espacio en dos (front y back). Paralelamente se genera una estructura de árbol donde se especifican qué objetos están en qué semiespacio. Luego, en uno de los semiespacios se hace la misma tarea. Se toma un elemento raíz y se subdivide el semiespacio en dos. Paralelamente se construye la estructura de árbol. Se continúa hasta que haya un objeto por nodo. Posible subdivisión espacial y árbol final. Luego de construido el árbol, lo que interesa es que rápidamente se puedan dibujar los polígonos en el orden correcto según la posición del observador. Se recorre el árbol recursivamente. Se comienza por la raíz. Cómo el observador está detrás del polígono 3 (observe la normal) entonces el orden correcto es: recorrer primero el subárbol front, luego pintar el polígono raíz y luego recorrer el subárbol back. Siga el algoritmo y verá que se pintan todos los polígonos en el orden correcto. El algoritmo es de orden n, luego de hallado el árbol. Otra posible subdivisión espacial y árbol final.