Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Bounding Box Por Matrix

Iniciado por Haddd, 22 de Diciembre de 2005, 12:00:13 PM

« anterior - próximo »

tiutiu

 Yo uso el metodo de actualizacion de WildMagic (de David Eberly, en geometrictools.com) para el arbol de BBoxes.
Cuando queremos actualizar las transformaciones de objeto, comenzamos por un nodo y calculamos la worldTransform basandonos en la del padre. Luego seguimos la recursion hacia las hojas. En el pase hacia arriba de la recursion, vamos actualizando el worldBound en base a los worldBound de los hijos. Cuando llegamos al nodo que ha iniciado el cambio, se propaga su worldbound hacia arriba.
De esta manera evitamos recalcular los bounds para los subarboles que no han sido afectados.
Yo solo guardo 1 vector para los extents desde el centro en las AABB, y 4 vectores en las OBB, 3 para las axis y 1 para los extents desde el centro. A parte tambien tengo el centro de la caja (pivote).
Tengo un metodo que calcula los 8 puntos y los deja en un array, prefiero no almacenarlo en el BBox para ahorrar espacio y llamarlo solo cuando lo necesite.
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos

AK47

 ¿Puedes darme la dirección del método de WildMagic, tiutiu? He estado mirando en www.geometrictools.com y no lo he encontrado por ninguna parte  (nooo)

Muchas gracias  (ole)  

tiutiu

 En la seccion SceneGraph tienes el codigo fuente de las clases Spatial (nodo abstracto), Node (nodo composite) y Geometry (nodo hoja) que son las que necesitas mirar. El punto de entrada es Spatial::UpdateGS(), y llama a funciones polimorficas de Spatial, Node y Geometry.
Tambien puedes mirar este trozo del libro 3D Game Architecture en donde explica como va el arbol (actualizacion de transformaciones/BBoxes) por si no te aclaras con el codigo, aunque es bastante intuitivo.
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos

zupervaca

 El no usar dos puntos espaciales (mínimo y máximo) trae consecuencias como la del código que usa para saber si colisionan dos boundingbox, aparte el sistema de volver a calcular todos los nodos superiores del que se modifica es como volver a calcularlos todos ya que normalmente se modifican los nodos mas inferiores que son los objetos animados, es decir, personajes, huesos, etc. No digo que este mal, solo que no esta optimizado como debería.

PD: Es una opinión que puede estar acertado o no, con lo que por favor nada de avalanchas en plan flame, simplemente yo tengo rutinas mas optimizadas para estos casos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.