Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Affinetransformation

Iniciado por Haddd, 04 de Octubre de 2004, 05:47:04 PM

« anterior - próximo »

Haddd

 Resulta que me he dado cuenta de que si paso un valor de 1  en escala a:

matriz.AffineTransformation(escala, centroRotacion, quaternion, posicion);

me está escalando, algo que yo no quiero. La documentación indica que hay que ponerle un 0 si no quieres escalado, pero si lo haces, la matriz resultado no tiene ningún sentido.

Yo creía que era un error en la documentación y que en realidad teníamos que poner un 1, pero al hacer los bounding boxes, me he dado cuenta del error!.

¿Porqué NO funciona si le pongo un 0?

BeRSeRKeR

 Está claro que poniendo cero como escalado, la rotación se va a freir espárragos. Poniendo uno debería funcionar y no escalaría.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Haddd

 Pero si le pongo 1 me escala. Lo sé porque si utilizo la matriz de identidad en lugar de la que me devuelve affinetransformation, e lobjeto me aparece más grande. :blink:

Y en la documentación dice que 0 no escala. (nooo)  

BeRSeRKeR

 Mira, yo he probado a crear dos matrices que rotarán un punto -90º en X. Una utilizando RotationX y la otra AffineTransformation:

CitarMatrix Rx = Matrix.RotationX(-(float)(Math.PI/2.0));

CitarMatrix m = new Matrix();
Vector3 o = new Vector3(0.0f, 0.0f, 0.0f);
Vector3 t = new Vector3(0.0f, 0.0f, 0.0f);
Quaternion q = Quaternion.RotationMatrix(Rx);
m.AffineTransformation(1.0f, o, q, t);

En ambos casos la matriz es la misma...

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Haddd

 Mira, he puesto una nueva versión:

Nueva versión

Tiene varios cambios respecto a la última. Si la ejecutas verás un cubo rotando y su bounding box. Su BB es una locura como podras ver. No tengo ni idea de porque ocurre esto, creo que de tanto mirarlo ya no se que leo. (nooo)

Veras que el motor tiene muchos cambios para ya poder utilizar los BB. Bueno, a ver si descubre alguien el problema.


Haddd

 Ya esta resuelto.

Metodo tradicional:

Dejarlo un ratito, descansar y volver a leer. (ole)

BeRSeRKeR

 ¿Qué es lo que has hecho?.

A mí lo que se me ocurre es guardar los valores Min/Max originales y al calcular el nuevo Min/Max (aplicando la matriz de transformación), recalcular ese nuevo Min/Max en base a los Min/Max originales.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Haddd

 Esta noche subiré de nuevo la versión. Allí verás mejor como lo resuelvo. Por cierto, utilizo tus métodos para frustum (ole)  






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.