• No results found

Initialization time, total run time, and initial and boundary conditions used in the 815

La descomposición espacial es una técnica utilizada para descartar pa-res de objetos. Se utiliza para determinar en qué zona del espacio se en-cuentra un objeto o parte del mismo (incluidas las características de un poliedro), y realizar un test de colisión entre objetos (o partes) sólo si ocupan la misma zona del espacio.

A continuación, veremos algunos métodos de descomposición espacial utili-zados en detección de colisiones:

Rejilla de vóxeles

Una rejilla es una partición del espacio en celdas rectangulares y uniformes, es decir, todas las celdas tienen el mismo tamaño. Cada objeto se asocia con las celdas en las que se encuentra. Para que dos objetos colisionen deben ocupar una misma celda; sólo debe comprobarse la colisión entre objetos que ocupen la misma celda.

Rejilla utilizada en la detección de colisiones

Averiguar la celda a la que pertenece una coordenada consiste en dividir entre el tamaño de la celda, lo cual es simple y eficiente. Además, las celdas adyacen-tes a una dada se pueden localizar fácilmente. Esta simplicidad ha hecho que las rejillas se utilicen comúnmente como método de descomposición espacial. En términos de eficiencia, uno de los aspectos más importantes de los métodos basados en rejillas consiste en elegir el tamaño apropiado de las celdas. Hay cuatro situaciones en las que el tamaño de las celdas puede ser un problema: • La rejilla es muy fina. Si las celdas son muy pequeñas, el número de celdas

que se han de actualizar será alto y, por tanto, costoso en términos de espacio y tiempo empleados.

• La rejilla es demasiado dispersa en relación con el tamaño de los objetos. Si los objetos son pequeños y las celdas grandes, habrá muchos objetos por celda. En esta situación, puede ser necesario realizar muchos pares de test de colisión entre los numerosos objetos clasificados en una celda. • La rejilla es demasiado dispersa en relación con la complejidad de los

ob-jetos. En este caso, el tamaño de las celdas es adecuado al tamaño de los objetos. Sin embargo, el objeto es demasiado complejo. Las celdas deben reducirse de tamaño, y los objetos descomponerse en piezas más pequeñas.

• La rejilla es demasiado fina y dispersa. Si los objetos son de tamaños muy dispares, las celdas pueden ser muy grandes para los objetos pequeños y viceversa.

Normalmente, el tamaño de celda de una rejilla se ajusta para que acomode el objeto de mayor tamaño rotando un ángulo arbitrario. Así se asegura que el número máximo de celdas que ocupa un objeto sea de cuatro en 2D y de ocho en 3D. De esta forma, se reduce el esfuerzo necesario para insertar o actualizar los objetos en la rejilla, así como el número de test de colisiones que realizar.

Octrees y k-d trees

Un octree es una partición jerárquica del espacio mediante vóxeles alineados con los ejes. Cada nodo padre se divide en ocho hijos. El nodo raíz suele re-presentar el volumen del espacio completo que se ha de rere-presentar (la esce-na). Este volumen se divide en ocho sub-volúmenes, tomando la mitad del volumen en los ejes x, y, z. Estos ocho volúmenes se dividen de forma recur-siva de la misma manera. El criterio de parada puede consistir en alcanzar una profundidad máxima en el árbol generado o un volumen mínimo por nodo.

Estructura de un octree

En un k-d�tree cada región es dividida en dos partes por un plano alineado con los ejes. Un k-d tree puede realizar divisiones uniformes del espacio o variables (existen también octrees con divisiones variables). Las divisiones variables ne-cesitan mayor almacenamiento para la estructura pero se adaptan mejor a los objetos.

Ejemplo de k-d tree

El hecho de utilizar una subdivisión jerárquica del espacio permite la adapta-ción a las densidades locales del modelo. En regiones en las que hay un gran número de objetos, podemos dividir más que en regiones en las que hay me-nos objetos. En aplicaciones de detección de colisión entre objetos en movi-miento, una celda puede subdividirse cuando entran nuevos objetos y agru-parse celdas en una cuando el número de objetos disminuye.

BSP trees

Un árbol de partición binaria del espacio es una estructura jerárquica que sub-divide el espacio en celdas convexas. Cada nodo interno del árbol sub-divide la región convexa asociada con el nodo en dos regiones, utilizando para ello un plano con orientación y posición arbitrarias. Es análogo a un k-d tree variable, sin la restricción de que los planos estén orientados de modo ortogonal con los ejes.

Ejemplo de BSP: visualización de los planos de corte y de la estructura de árbol resultante

Un árbol BSP puede utilizarse como esquema de representación de objetos o como partición del espacio. Normalmente, se utiliza como partición del espa-cio y presenta el problema de cómo elegir los planos sobre los que dividir el espacio para obtener una descomposición óptima.

Lectura complementaria

Para abordar cómo elegir los planos sobre los que dividir el espacio para obtener una composición óptima, podéis consultar:

B.� Naylor (1993). "Constructing good partitioning trees". Graphics Interface (pág.

181-191). Disponible en http://www.graphicsinterface.org/pre1996/93-Naylor.pdf

Related documents