Estoy intentando calcular el BoundingBox de una malla para controlar las colisiones mediante:
Geometry.ComputeBoundingBox(vertexData, maya.NumberVertices, description.VertexFormat, min, max)
Segun tengo entendido los vectores max y min estan dados en coordenadas del espacio-modelo. Por lo que les aplico a ambos la matriz de transformación del objeto:
min = Microsoft.DirectX.Vector3.TransformCoordinate(min, Me.MatrizMundo)
Sin embargo en algunos casos los valores no son correctos, es como si no detectara una parte de la malla.
¿Sabeis donde puede estar el problema?
Saludos
no, los valores qe te devuelve min y max dependen del modelo. Así que si tu modelo está en WorldSpace, te devolverá valores en WorldSpace. Normalmente los modelos están en object space, así que te devolverá object.
Gracias por la respuesta
¿Object space es lo mismo que espacio-modelo?
El modelo creo que está en Espacio-Modelo ya que de da las posiciones antes de haberlas escalado, rotado y movido.
¿Como puedo poner el modelo en WorldSpace?
sí, object space es lo mismo que model-space.
Pues si tienes el objeto en object space, y necesitas el bounding en world space, tienes que multiplicar el min y max que te devuelve por la matriz de transformación a World Space. El problema es que si hay rotaciones, el 'cubo' que forma el bounding box, también te rotará y ya no te quedará un cubo alineado con los ejes XYZ, que es lo que se suele buscar. Para resolverlo, con los valores que te da el min y el max, vuelve a calcular el bounding box de esos 8 puntos.
Si, parece que el bounding box tambien rota.
He probado a obtener el bounding box, rotarlo y calcular el bounding box del anterior bounding box, pero no funciona.
Solucionado :-)
Gracias