TEMA 1: MODELOS DE REPRESENTACIÓN DE OBJETOS 3D

1.1. MODELOS DE SUPERFICIES

Existen varias razones para querer representar un objeto mediante un modelo de superficie:

En cualquiera de estos casos es conveniente utilizar una representación de la superficie del objeto. En principio la información sobre una superficie debe dar cuenta de su geometría, de sus propiedades visuales (cómo se comporta frente a la luz [LINK A MODELO LUZ-SUPERFICIE]) y quizás también de alguna propiedad física (como la elasticidad) si se va a efectuar una simulación física sobre el objeto.

Si la totalidad del objeto consta de diferentes partes (por ejemplo, varios polígonos o varios trozos definidos por diferentes ecuaciones), entonces podemos añadir también información topológica, es decir, sobre cómo estas diferentes partes se conectan entre sí para formar la superficie. Con esta información adicional el modelo se conoce como una representación de frontera del objeto (b-rep: boundary representation). Esta representación de frontera se utiliza frecuentemente en combinación con un modelo sólido, ya que una de ellas se puede reconstruir a partir de la otra.

En general, las diferentes representaciones no se excluyen entre sí, y muchos programas suelen combinarlas, pasando de una a otra según convenga.

Una característica que suele exigirse a las superficies representadas es que sean variedades bidimensionales (en inglés: superficies 2-manifold), es decir, que no existan puntos singulares donde la superficie se intersecte consigo misma o se abra en varias hojas. Ver figura 1.1


Figura 1.1.: Ejemplo de una superficie que NO es 2-mainfold

1.1.1. MODELO POLIÉDRICO

Consiste en definir el objeto a través de una superficie formada por polígonos que comparten sus aristas y vértices, es decir, de un poliedro, que puede ser abierto o cerrado. La exigencia de que sea una variedad bidimensional se traduce, en este caso, en la restricción de que los polígonos no se intersecten entre sí excepto en las aristas, y que en una arista no puedan confluir más de dos polígonos. En un vértice pueden coincidir cualquier número de polígonos.

Además, una buena representación poligonal debe tener en cuenta:



La representación basada en polígonos tiene la ventaja de que permite hacer una visualización muy rápida, porque únicamente se deben realizar una serie de operaciones lineales muy eficientes, tanto para la proyección sobre la pantalla como para el posterior rellenado de los polígonos, gracias a lo cual es muy adecuada para representaciones en tiempo real [ENLACE]. Como veremos después, su visualización mediante trazado de rayos, en concreto el cálculo de intersecciones [ENLACE] también resulta especialmente simple.

Sin embargo, los objetos complejos o de origen natural raras veces están descritos perfectamente por medio de polígonos exactos, por lo que en su representación por este método se deberán realizar aproximaciones , haciendo que la superficie aparezca formada por 'trozos' no suaves claramente visibles.

[AÑADIR AQUÍ ECUACION DEL PLANO Y LA FORMA DE UTILIZARLA PARA DISTINGUIR INTERIOR/EXTERIOR EN OBJETOS CONVEXOS]

".ENLACE A CARACTERÍSTICAS DE LOS POLÍGONOS."

1.1.1.1. REPRESENTACIÓN POR POLÍGONOS AISLADOS

En este caso un poliedro se representa mediante una lista de polígonos, siendo cada uno de éstos una lista de vértices o de aristas. Hay que tener cuidado a la hora de definir polígonos con más de tres puntos, ya que cuatro puntos no tienen porqué ser coplanarios en el espacio de tres dimensiones y al proyectarlos para formar una imagen bidimensional, los resultados pueden no estar bien definidos (ver un ejemplo en la figura 1.1.1.1.A).


Figura 1.1.1.1.A.: Ejemplo de BOWTIE proyectado en 2 dimensiones, figura formada por 4 puntos no coplanarios

Para ello poder incorporar información topológica, de relación de vecindad entre los polígonos, hay que construir una estructura de datos en la que se especifiquen las referencias adecuadas.

Vamos a ver un par de formas de representar un conjunto de polígonos en forma de tabla, de manera que sea posible extraer información topológica. La primera forma contendría:


De forma que será muy sencillo comprobar si dos polígonos se tocan pues deberán compartir al menos una arista.

O bien :


Estas representaciones se pueden reducir eliminando información redundante, o añadir más información para facilitar la búsqueda de relaciones entre los diferentes elementos. Aparece por tanto, la necesidad de un compromiso entre la cantidad de almacenamiento requerida, la complejidad de la estructura de datos y la rapidez de acceso a la información geométrica y topológica.

Un mismo vértice puede formar parte de diferentes polígonos. Si guardamos la información de cada vértice (posición, vector normal, color, etc.) una sola vez y luego, cuando describamos los polígonos de los que forma parte, hacemos referencia a él mediante su índice en la tabla de vértices entonces se dice que estamos describiendo el objeto de forma indexada. Si, por el contrario, cada vez que un vértice aparece en la descripción de algún polígono repetimos toda la información correspondiente al vértice, entonces estamos trabajando con una estructura no indexada.

La estructura indexada tiene la ventaja de ahorrar espacio de almacenamiento. Sus desventajas son que no permite la discontinuidad de color u otra magnitud asociada a los vértices, ya que dos polígonos que comparten el mismo vértice tienen la misma normal en ese punto. Esto produce un efecto de suavizado del color de la superficie que a veces resulta irreal (ver Figura 1.1.1.1.B). Otra desventaja es que se produce un ligero aumento en el tiempo necesario para una consulta de datos sobre los vértices, ya que primero debe averiguarse el índice y luego buscar la información deseada en la tabla.

En caso de emplear una lista no indexada, se puede representar un poliedro con una única lista de polígonos, definidos por las coordenadas de cada uno de los vértices que lo componen. Al no disponer de una tabla de vértices, se consigue acceder de forma mucho más rápida a las coordenadas, puesto que ahora se obtienen con un único acceso. Sin embargo, tiene el inconveniente de aumentar considerablemente el espacio de almacenamiento necesario, ya que las coordenadas de los vértices aparecen repetidas cada vez que un mismo vértice pertenece a varios polígonos distintos.

1.1.1.2. MALLAS POLIGONALES ( PRIMITIVAS POLIGONALES )

Las primitivas o mallas poligonales son grupos de polígonos que se describen de forma conjunta para ahorrar espacio de almacenamiento y coste de visualización en tiempo real, razón por la cual son ampliamente utilizadas.

Algunas de las primitivas más utilizadas son:






En realidad, la mayor parte de aplicaciones y librerías gráficas descomponen posteriormente todas estas primitivas en triángulos durante el proceso de visualización.

1.1.2. SUPERFICIES CURVAS

La ventaja de las representaciones poliédricas es que son más adecuadas para la visualización utilizando el hardware gráfico que trabaja con polígonos. El problema que plantean es que la mayoría de los objetos no son realmente poliedros, sino que están compuestos por superficies contínuas curvadas.

Para representar un objeto complejo se puede utilizar una descomposición de la superficie en trozos o parches (patches) triangulares o cuadrangulares, cada uno de los cuales se suele modelar con superficies paramétricas (superficies de Bezier, NURBS...). Estas superficies proporcionan, como veremos luego, una mayor facilidad para el modelado, ya que en el caso de tener una descripción que contenga muchos polígonos resulta tedioso modificar la posición de cada uno de los vértices para ir cambiando la forma del objeto. Si despues de la fase de modelado utilizando superficies curvas es necesario hacer una visualización en tiempo real, entonces puede efectuarse una descomposición poligonal de la superficie suave (del nivel de detalle que nos convenga).

Los problemas que plantean con este tipo de representación contínua a trozos son, por una parte, la dificultad de controlar que la forma de la superficie es exactamente la que queremos y por otro la complejidad de mantener las restricciones (continuidad, derivabilidad) en las intersecciones de los trozos.

Para definir una superficie curvada y suave de forma exacta debemos recurrir a una representación analítica, es decir, mediante ecuaciones. Dependiendo de la forma de las ecuaciones habrá que evaluar la superficie (hallar sus puntos) utilizando distintos métodos. En general tenemos los siguientes tipos:

En tres dimensiones una ecuación explícita siempre puede transformarse en paramétrica, como podemos ver en el siguiente ejemplo:

Si es la ecuación en forma explícita, entonces la ecuación paramétrica podemos definirla como :



1.1.2.1. SUPERFICIES PARAMÉTRICAS : SUPERFICIES DE CONTROL.

Vamos a examinar alguna de las formas de proceder con una superficie paramétrica, que mostrarán lo simple que resulta su utilización en ciertos algoritmos y su visualización. Si se emplean las ecuaciones paramétricas para definir una superficie, es posible hallar puntos que pertenezcan a ella (por ejemplo, para poder dibujarla) sin más que ir dando valores a los parámetros u y v, de tal forma que se recorre la superficie de forma exhaustiva. En muchas representaciones se normaliza la ecuación de manera que los parámetros u y v solamente tomen valores en el rango [0,1].

Además se pueden calcular muy fácilmente algunos parámetros interesantes, como pueden ser :

El problema de esta aproximación es que la complejidad de las ecuaciones suele aumentar enormemente cuando imponemos muchas restricciones (por ejemplo, que la superficie pase por más y más puntos que nos interesan). También aparecen efectos indeseados; las superficies resultantes pueden tener una forma extraña aunque pasen por los puntos como puede verse en el siguiente dibujo.


Al aparecer ordenadores capaces de representar gráficos, y comenzar su aplicación en el Diseño Asistido por Ordenador (CAD), surgieron grupos de investigación en empresas de automóviles que desarrollaron la teoría y la aplicación de ciertas superficies paramétricas cuya forma se podía definir de manera sencilla a través de puntos de control, garantizándose que su forma no sufra variaciones incontrolables. Las curvas más interesantes son construidas a partir de polinomios y cumplen con la siguiente propiedad: si definimos el cierre convexo de un conjunto de puntos como el mínimo polígono convexo (en 2D) o poliedro convexo (en 3D) que los contiene, entonces se cumple que la curva o superficie determinada por un conjunto de puntos de control no se sale del cierre convexo de estos puntos.

No vamos a especificar aquí en detalle los diferentes tipos de superficies paramétricas polinómicas con puntos de control. Las más empleadas son las "s_bezier.htm"[ENLACE] superficies de Bèzier, las B_Splines y las NURBS (ver Figura 1.1.2.1.). Su forma general sería:

ECUACION GENERAL: X(u,v) = …[ENLACE Sup. Bèzier)


Figura 1.1.2.1.: Ejemplo de superficie diseñada con NURBS

Para realizar la visualización de estas superficies primero habrá que evaluar los polinomios que aparecen en su expresión analítica. Ya hemos visto que una forma de dibujar la superficie sería ir dando valores a los parámetros u y v. Para acelerar la evaluación de los polinomios podemos utilizar el método de Horner , ya que para un polinomio de grado N solamente utiliza N multiplicaciones y N sumas: [EJEMPLO].[ENLACE Horner]

Otras formas de optimizar estos cálculos se basan en el calculo de incrementos a partir de un primer punto "incre_dif.htm" [ENLACE cálculo de incrementos diferenciales] o en la realización de sucesivas subdivisiones de forma adaptativa "subdi.htm" [ENLACE Métodos de subdivisión].


1.1.2.2. SUPERFICIES IMPLÍCITAS : ISOSUPERFICIES Y SUPERFICIES EQUIPOTENCIALES.

Otro método de modelado especial de superficies consiste en definirlas como funciones en forma implícita, es decir, en la forma F(x,y,z)=0 y luego buscar alguna manera de visualizarlas. Esto es equivalente a definir un campo escalar en el espacio y luego tomar todos los puntos x,y,z en los que esa magnitud toma un valor constante.

De esta forma, a partir de una función , podemos definir otra función en froma implícita equivalente, sin más que hacer :

Este tipo de objeto se denomina también isosuperficie. Si el campo escalar varía de forma suave (existe su gradiente o derivada respecto a la posición) entonces se denomina potencial (como el generado por un campo de fuerza en física). En ese caso la isosuperficie se denomina superficie equipotencial.


Una forma de poder controlar la forma de esas superficies para utilizarlas en el modelado de objetos es hacer que la función F(x,y,z) sea la suma de varias contribuciones generadas por diferentes objetos básicos instanciados en la escena, normalmente esferas o elipsoides. El símil físico sería que cada uno de esos objetos genera un cierto campo de fuerza (gravitatorio, eléctrico...), un potencial a su alrededor, en cada punto del espacio. La superficie equipotencial envolverá a los objetos básicos como una película elástica de aspecto suave. Es por ello que estos 'objetos globulares' (blobs o blobby objects) que se utilizan ampliamente para representar formas orgánicas, en las que la piel o la concha recubren las estructuras internas (esqueleto, músculos).

Un ejemplo popular de esta aproximación es la combinación de funciones gaussianas en las que el potencial en cada punto producido por cada una de las componentes es una curva normal o gaussiana.

De este modo si para cada punto se define :


Entonces podemos definir el potencial en cada punto como :


De forma que la superficie equipotencial quedaría como sigue :


Este tipo de objetos se conoce también como blobs en algunos paquetes de animación.

Otro son las metaballs, definidas mediante polinomios, y por tanto más fáciles de evaluar, como podemos ver en su ecuación general (ver figura 1.1.2.2).


Con y b la fuerza, r la distancia entre un punto y el centro y d el radio, es decir, el tamaño de la componente.

Otra posibilidad son los soft objects. En los que la ecuación general es :




Figura 1.1.2.2.:Ejemplo de superficie equipotencial generada con tres esferas

La visualización de cualquier isosuperficie puede realizarse básicamente por dos métodos diferentes, bien por generación de polígonos ("marching.htm">Marching Cubes ) o por trazado de rayos [ENLACE]. También pueden dibujarse ciertas aproximaciones durante la fase de modelado, que requiere una visualización rápida [ENLACE] "aprox_edit.htm" Aproximaciones durante la edición.

1.2. MODELO DE SÓLIDOS

Deberemos representar nuestros objetos con un modelo de sólido cuando:

Existen dos tipos básicos de representaciones:

Al igual que en las superficies formadas por polígonos podían plantear situaciones no regulares, también las representaciones de volumen pueden dar lugar a singularidades (p. ej. objetos de volumen nulo) o incoherencias (p. ej. autointersecciones en las que una misma parte del objeto se representa dos veces).

Sea cual sea el modelo que elijamos para representar los sólidos, éste debe permitirnos realizar las llamadas operaciones booleanas (unión, intersección, resta o negación).

[NOTA: La resta y la negación son interdefinibles, es decir, que podemos definir una a partir de la otra del siguiente modo :.

Estas operaciones deben definirse de forma que sean regulares: su resultado debe ser siempre un sólido real (deben tratarse con cuidado los casos en que la intersección es sólo un plano, recta o punto, o cuando el resultado puede ser nulo, por ejemplo al restar un objeto a sí mismo). Estas operaciones son muy útiles para el modelado geométrico 3D, ya que podemos crear nuevos objetos añadiendo o quitando partes sólidas manteniendo la unidad del objeto como entidad.

Debemos tener siempre presente que cada método de representación tiene ciertas ventajas e inconvenientes, por lo que se suelen combinar en las aplicaciones prácticas. Por ejemplo, se puede usar uno durante la fase de modelado, otro para una simulación física y otro para la visualización realista, efectuándose las conversiones apropiadas.

Los objetos de partida pueden generarse por diferentes métodos, sea cual sea el método de representación interna elegido. Los más sencillos son la instanciación de primitivas, es decir, de objetos predefinidos, y la generación por desplazamiento de superficies o sólidos. El barrido o desplazamiento puede ser utilizado también como una representación de ciertos objetos. Por ejemplo, cuando trasladamos una figura plana a lo largo de un eje definimos una forma tridimensional por extrusión (ver figura 1.2.1.) y cuando giramos una superficie o línea en el espacio alrededor de un eje definimos un sólido de revolución.

1.2.1. MODELOS DE BARRIDO

a) Extrusión de una superficie (genera un volumen)

Ex. paralela recta

Ex. paralela curva


Ex. de proyección: convergente o divergente


Ex. Generalizada



b) Extrusión de una línea

Existen los mismos tipos que en el caso anterior.

La línea puede ser abierta o cerrada dependiendo de lo cual se generará una superficie abierta o cerrada (que envuelve un volumen).

c) Rotación de una línea sobre su eje

Genera una superficie o un sólido de revolución dependiendo de si la línea se cierra sobre su eje (ver figura 1.2.1.)


Figura 1.2.1.:Generación de un objeto por extrusión y por rotación

El mecanismo de barrido se suele emplear para construir los objetos, pero a la hora de visualizarlos lo habitual es pasar a otro tipo de representación (paramétrica o poligonal). Sin embargo, también es posible hacer un trazado de rayos con bastante facilidad.

1.2.2. DISEÑO DE SÓLIDOS. GEOMETRÍA SÓLIDA CONSTRUCTIVA ( En inglés CSG: Constructive Solid Geometry)

Este es uno de los paradigmas dominantes en el modelado de sólidos. Se trata de instanciar objetos primitivos y combinarlos mediante operaciones booleanas ( unión, intersección, resta, ...). La representación de un objeto complejo es un árbol en el que figuran las operaciones y objetos primtivos que definen la forma del objeto (ver figura 1.2.2.). De esta forma tan sencilla se representa un objeto en la memoria o en una base de datos.

En el árbol CSG se incluyen distintos tipos de nodos :

La cuestión siguiente es cómo visualizarlo. Existen algoritmos que sirven para visualizar directamente el objeto a partir del árbol CSG. mediante [ENLACE] trazado de rayos o procesamiento de tipo ráster. Otros métodos se basan en el paso de la representación CSG a otro tipo (superficie o partición espacial) que facilite el uso de algoritmos de visualización.


Figura 1.2.2.: Construcción de un sólido mediante un árbol CSG

Como otros métodos de representación del volumen, el sistema CSG resulta también adecuado para añadir a los objetos propiedades físicas, ya que se está representando directamente su volumen, y permite realizar la comprobación de pertenencia al objeto de los puntos en el espacio, como vamos a ver ahora.

El modelo CSG resulta muy adecuado cuando los objetos a representar se forman por combinación de formas básicas sencillas (paralelepípedos, esferas, cilindros, etc.), pero puede resultar muy ineficiente para otro tipo de objetos.

C.S.G. como método de partición espacial

Los métodos de partición espacial distinguen entre aquellas regiones del espacio que contienen puntos del objeto y aquellas que no lo contienen. La evaluación de puntos resulta muy sencilla en un árbol CSG por medio de un proceso recursivo.

El algoritmo siguiente muestra una posible implementación para este algoritmo recursivo suponiendo que la estructura NODO tiene una serie de campos específicos como son, nodo_tipo que indica el tipo de operación booleana , si es un nodo de operación, o el tipo de objeto en caso de que se trate de un nodo de primitivas. Además contiene dos campos adicionales entendidos como dos punteros a cada uno de sus posibles hijos, que serán de nuevo una estructura nodo.

esta_dentro (nodo, punto)

{

switch (nodo_tipo) {

caso UNION : esta_dentro esta_dentro (nodo.hijo1) OR esta_dentro(nodo.hijo2)

caso INTERSEC :esta_dentro esta_dentro(nodo.hijo1) AND esta_dentro(nodo.hijo2)

caso RESTA: esta_dentro esta_dentro (nodo.hijo1) AND NOT esta_dentro(nodo.hijo2)

.

.

.

caso CUBO : esta_dentro comprobar_cubo(punto)

.

.

.



1.2.3. MODELOS DE PARTICIÓN ESPACIAL

Aunque la geometría sólida constructiva induce una división del espacio, no puede hablarse propiamente de una partición, ya que por definición ésta estaría formada por elementos que no tienen intersección entre sí.

Definición de partición espacial: Conjunto de volúmenes { Vi } , que permite caracterizar qué parte del espacio está dentro del objeto y qué parte está fuera. Debe cumplir:


Algunas de las utilidades del empleo de este método de representación son:

a) Clasificación de puntos : para discernir cuáles son los puntos del espacio ocupados por el objeto y cuáles no

b) Información sobre propiedades de puntos en el espacio. Cada volumen de la partición puede además contener información adicional sobre alguna propiedad del objeto en esa parte del espacio (densidad, color, presión, composición…).

c) Clasificación de objetos dentro de la escena : en este caso no se trataría de describir la forma de un objeto determinado, sino de agrupar los objetos de una escena compleja en partes para optimizar los métodos de visualización [ENLACE OPTIMIZACION TRAZADO RAYOS], [ENLACE OPTIMIZACION TIEMPO REAL].

Las particiones pueden dividirse en no jerárquicas, cuando existe un único conjunto de volúmenes que forman la partición, y no tiene relaciones internas de inclusión, o bien particiones jerárquica y que consistirán en sucesivas particiones de más y más detalle, cuyos volúmenes están incluidos en una partición de nivel inferior, y que se forma mediante operaciones sucesivas de división.

1.2.3.1. PARTICIONES NO JERÁRQUICAS

En este caso la partición no se forma por operaciones sucesivas de división, sino que se da directamente todo el conjunto de volúmenes en los que se ha dividido el espacio de partida. No existen relaciones de inclusión, entre los volúmenes .

* Descomposición en celdas [dibujo]

En este caso los volúmenes de la partición son celdas contiguas delimitadas por caras que pueden ser planas o curvas, y que pueden tener asociados datos escalares o vectoriales sobre la parte del objeto que representan. Las diferentes celdas se encuentran pegadas entre sí sin intersectarse, y pueden tener diferente forma y tamaño. Frecuentemente esta representación se usa para efectuar el llamado análisis por elementos finitos (FEA: Finite Element Analysis), que simula efectos físicos en un objeto sólido o fluido (cambios de temperatura, presión, velocidad de flujo, etc.) utilizando una descomposición en celdas que interactúan entre sí.


Aunque se trata de una estructura de datos sencilla, tiene el inconveniente de requerir gran volumen de almacenamiento.

* Enumeración de la ocupación espacial: voxels [dibujo]

Es un caso especial de descomposición por celdas en el que éstas son todas idénticas y se organizan en un entramado regular o rejilla. Es frecuente que las celdas sean pequeños cubos alineados en una trama ortogonal en cada uno de los ejes de coordenadas. Estas celdas idénticas se llaman voxels (el equivalente de un pixel en tres dimensiones). Se trata de una representación muy utilizada para almacenar datos de dispositivos tipo escáner. El problema es la cantidad de espacio que se requiere para almacenar un objeto complejo y el coste de su representación visual.



1.2.3.2. PARTICIONES JERÁRQUICAS

Este tipo de particiones se caracteriza por irse realizando por niveles sucesivos. La estructura de datos que se emplea es un árbol, lo que disminuye el espacio de almacenamiento requerido y hace posible definir a la vez varios niveles de detalle. Podremos acceder a la información o efectuar la visualización recorriendo la estructura solamente hasta el nivel que nos interese.

* Particiones Jerárquicas no ortogonales: árboles binarios

Se puede efectuar una división sucesiva del espacio en semiespacios utilizando planos de orientación arbitraria. Estos planos se organizan en un árbol de particiones espaciales binarias o BSP-tree (Binary Space Partition tree), en el que cada nodo representa un plano, y sus dos hijos son los dos semiespacios que define. En los nodos terminales del árbol del árbol se nos indica si cada región definida por los sucesivos cortes cae dentro o fuera del objeto (ver un ejemplo en 2D en la figura 1.2.3.2).

FIGURA 1.2.3.2: DESCOMPOSICIÓN DE UNA FIGURA BIDIMENSIONAL EN UN BSP-TREE

Utilización de un BSP_trees para clasificar puntos

Como los demás métodos de partición espacial, estos árboles binarios nos permiten efectuar una clasificación de la pertenencia de cualquier punto del espacio al objeto definido. Para ello hay que comenzar por el plano que está en el nodo raíz del árbol. Calculando el signo de la distancia del punto al plano se sabe si hay que pasar a la rama derecha o la izquierda del árbol. Se sigue este proceso recursivamente hasta que se llega a un nodo terminal, que nos indicará si el punto está dentro o fuera.

esta_dentro (nodo, punto)

{

si ( nodo = SI ) esta_dentro VERDAD /* Nodo terminal "dentro" = SI */

si ( nodo = NO ) esta_dentro FALSO /* Nodo terminal "fuera" = NO */

si ( comprobar_punto_plano ( punto, nodo.plano) = DENTRO )

esta_dentro esta_dentro (nodo.nodo_dentro, punto) /* Pasar a hijo izquierdo */

sino

esta_dentro esta_dentro (nodo.nodo_fuera, punto) /* Pasar a hijo derecho */


El problema es que la representación de un objeto con un BSP-tree no tiene porqué ser única, y por lo tanto las hay más sencillas y más complejas. Por esta razón habrá que tener cuidado con el orden que se emplea al efectuar las particiones. Las mejores elecciones serán posiblemente aquellas que descarten más espacio que no pertenecen al objeto.

Además de las utilidades comunes a todos los métodos de partición, los árboles binarios han sido frecuentemente utilizados para ordenar los polígonos de una escena según la distancia al observador, y poder de esa manera aplicar el algoritmo del pintor (dibujar los polígonos de mayor a menor distancia) para calcular la ocultación de superficies en una escena 3D.

Para visualizar este tipo de objetos podemos emplear el trazado de rayos o bien convertirlos primero en polígonos.

Como puede verse fácilmente, los árboles binarios de particiones resultan especialmente eficientes para representar objetos formados por facetas planas, en los que la representación resulta, además, exacta.

* Particiones jerárquicas ortogonales (según los ejes del espacio)

En este caso las sucesivas particiones se realizan según planos que están orientados siguiendo los ejes ortogonales del espacio. El espacio suele, en este caso, delimitarse mediante una caja ortogonal que contiene completamente al objeto o escena. Si cada partición divide al espacio en dos semiespacios iguales, entonces estaríamos de nuevo ante un árbol binario. Si cada partición divide la caja en cuatro partes iguales de forma recursiva, entonces tenemos un árbol de cuadrantes o quadtree (ver figura 1.2.3.2.1.), que se suele usar para figuras planas. En el espacio resulta conveniente la división de cada caja en ocho cajas de tamaño mitad, formándose un árbol de octantes u octree.

Las particiones también pueden ser no homoeneas, cuando las partes resultantes no son iguales.

a) Partición jerárquica ortogonal homogénea: Octrees

Si queremos describir la forma de un objeto con un octree o árbol de octantes tenemos que crear una estructura arbórea en la que la que el volumen ocupado por el objeto se va aproximando recursivamente por medio de cubos, o paralelepípedos en general. Se trata de combinar celdas ortogonales cuya longitud de arista se va dividiendo sucesivamente por 2, intentando rellenar lo más aproximadamente posible el espacio del objeto deseado [VER DIBUJO DONDE SE EXPLICA LA FORMACION PROGRESIVA DEL OCTREE ver figura 1.2.3.2.1.]. Los nodos que no caen totalmente dentro o fuera del objeto se seguirán subdividiendo de forma recursiva. En cada nodo del árbol se puede indicar únicamente si la celda correspondiente cae dentro o fuera del objeto, o se puede considerar algún tipo de gradación (parcialmente dentro, 25, 50 y 75 % dentro, etc.). La recursión deberá detenerse según algún criterio (por ejemplo, las celdas no pueden tener una arista menor de un cierto valor) se limita directamente la profundidad del árbol a un valor máximo.

Existen métodos para asociar un código a cada posible celda, de manera que exista una notación para enumerar las que componen un cierto objeto.


FIGURA 1.2.3.2.1. - DESCOMPOSICIÓN DE SUPERFICIES EN QUADTREES Y SÓLIDOS EN OCTREES


La primera llamada al función tomaría como parámetros el cubo que se va a ir dividiendo y el valor del umbral para el cual ya no se deberá seguir dividiendo. La función conectar_nodo añade a la estructura arborescente el nuevo nodo, de tal forma que ya se conoce el camino desde la raíz hasta este nodo.

poner_nodo (nodo_padre, real lado, real lado_minimo)

{

si lado > lado_minimo

{

para cada octante o cuadrante

si (octante objeto)

{

hijo crear_nodo (SI)

conectar_nodo (padre, hijo)

sino si ( octante objeto)

{

hijo crear_nodo (NO)

conectar_nodo (padre, hijo)

sino

{

hijo crear_nodo (INDETERMINADO)

conectar_nodo (padre, hijo)

poner_nodo ( hijo, lado/2, lado_minimo)


En el caso de los octrees también resulta fácil utilizar esta estructura para clasificar puntos, comprobando recursivamente la pertenencia del punto a los nodos del árbol, comenzando por el nodo raíz.

b) Particiones jerárquicas ortogonales no homogéneas

En este caso la descomposición no se realiza por mitades iguales sino desplazando los planos de corte al punto donde se considere óptimo. De esta forma se puede aproximar más rápidamente la forma del objeto, aunque la estructura de datos se complica ligeramente y resulta un poco más difícil de manejar.

Los métodos jerárquicos ortogonales tienen la ventaja de presentar una estructura de datos muy compacta, que se presta a la utilización de algoritmos recursivos muy sencillos. Al ser jerárquicas, permiten una representación multiresolución del objeto y resultan mucho más compactas que la enumeración espacial (voxels).

Por contra, resulta difícil llegar a representar a un objeto de forma exacta, ya que éstos raramente tienen todas sus facetas orientadas ortogonalmente. La visualización de un objeto representado por un octree también es difícil, puesto que la transformación en polígonos no es inmediata, y el trazado de rayos tampoco es fácil si queremos calcular el valor del vector normal en la superficie del objeto para efectuar la iluminación.