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 »

Haddd

 ¿como resolveis la multiplicacion de un BB por una matriz? Nosotros multiplicamos cada punto por la matriz y luego volvemos a comprobar esos puntos en el BB para crear una nuevo...

¿como lo haceis vosotros?  

zupervaca

 Yo también transformo los puntos de un bounding-box origen que no cambia nunca (tiene las dimensiones de la malla) y con ellos voy creando un bounding-box, pero tiene que haber alguna otra forma ya que si pensamos en jerarquías de objetos la cosa se complica ya que cada vez que transformamos un hijo tendríamos que reconstruir todo la jerarquía.

fiero

 Un BB puede definirse por un vector que va desde el centro del BB hasta una de las esquinas. ¿Se podría transformar ese vector y luego simplemente volver a calcular las demás esquinas sumando y restando? Es un suponer.

Bueno, eso sería un AABB.

un saludo
www.videopanoramas.com Videopanoramas 3D player

Haddd

 No basta un vector, necesitas 2 :lol:  

Topper

 
CitarNo basta un vector, necesitas 2

Cierto, siempre y cuando el BBOX no sea cuadrado, y eso es algo habitual...

Warchief

 Uhm, ¿por qué si no es cuadrado necesita 2? Estamos hablando de un vector3d, que puede dar una caja rectángular siempre que X != Z.
La verdad es que se puede ver como las coordenadas ancho, alto y largo de una caja (x,y,z). Yo no veo problema.


Otra cosa es que no sea simétrica respecto de lo que vosotros conideráis el centro (el diamante o lo que sea); en ese caso, si podrían ser necesarios dos.

fiero

Cita de: "Haddd"No basta un vector, necesitas 2 :lol:
Bueno, sí. Yo para las AABB utilizo 2 vectores, uno da las dimensiones y el otro el desplazamiento de la caja. Es que me hago viejo....  :blink:  
www.videopanoramas.com Videopanoramas 3D player

zupervaca

 ¿Para los BoundingBox todos usáis dos puntos espaciales que definen el mínimo y máximo o usáis otro sistema?

Yo para calcular un BoundingBox transformado tengo que calcular a partir de esos dos puntos los ocho totales, una vez hecho esto los transformo y los agrego comprobando si deben expandir o no el mínimo y máximo. No se si es la mejor forma, pero es que no he encontrado ningún tutorial o código respecto a esto y tuve que inventarme esto.

Haddd

 Lo mismito hago yo  :P

 /// <summary>
       /// Apply the matrix to the 8 corners of the boundingbox and gets the new Boundings
 /// </summary>
       /// <param name="matrix">matrix to transform</param>
 public void ApplyMatrix(Matrix matrix)
 {
  // Si hay rotación tenemos que recalcular todas las esquinas
  // tenemos que ponernos en el peor caso posible!!
  float xi, yi, zi, xf, yf, zf;

  xi = min.X;
  yi = min.Y;
  zi = min.Z;
  xf = max.X;
  yf = max.Y;
  zf = max.Z;

  Reset();

  // Ahora calculamos las 8 esquinas

           CheckVertex(xi, yi, zi, matrix);
           CheckVertex(xi, yf, zi, matrix);
           CheckVertex(xf, yf, zi, matrix);
           CheckVertex(xf, yi, zi, matrix);

           CheckVertex(xi, yi, zf, matrix);
           CheckVertex(xi, yf, zf, matrix);
           CheckVertex(xf, yf, zf, matrix);
           CheckVertex(xf, yi, zf, matrix);
 }


Pogacha

 Por eso no usaba Bounding box para objetos transformables ... para objetos que se puedan rotar uso esferas de contención.
Saludos

Warchief

Cita de: "fiero"
Cita de: "Haddd"No basta un vector, necesitas 2 :lol:
Bueno, sí. Yo para las AABB utilizo 2 vectores, uno da las dimensiones y el otro el desplazamiento de la caja. Es que me hago viejo....  :blink:
El desplazamiento no va en la matriz de transformación? (o sólo guardáis rotación?)

zupervaca

 Yo en la matriz de transformación que le paso a la función esta todo (rotación, escala y translación), después en los dos puntos espaciales guardo las coordenadas de forma universal, es decir, no hace falta sumarles nada para saber su coordenada final, esto lo veo beneficioso para el frustum, colisiones, etc.

Editado: Gracias Haddd por resolver mi duda de si estaba pifiandola.

Haddd

 Nosotros tenemos LocalBB, que es el BB del Mesh en Object Space. Este siempre es el mismo a no ser que cambien los vértices.

WorldBB, que es el LocalBB*Matriz de Transformación

HierarchicalBB, que es el WorldBB + WorldBB de los objetos hijos relacionados.

zupervaca

 
CitarHierarchicalBB, que es el WorldBB + WorldBB de los objetos hijos relacionados.
Cuando un hijo cambia el boundingbox del padre... ¿volvéis a reconstruir todo el árbol?

Haddd

 sí ahora mismo se reconstruye todo. No hay ninguna optimización sobre eso






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.