Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Drácula en 01 de Enero de 1970, 01:00:00 AM

Título: La mejor forma de definir matrices es...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Bien, todos conocemos lo fantástico que es el mundo matricial, pero ahora os planteo una duda..¿Cómo definir una estructura matricial para un objeto ? Parece una tonteria, pero voy a poner un ejemplo:

Utilizar 5 matrices, 3 de rotación, 1 de posición y 1 de escalado. Esto facilita mucho el código, pero no es optimo, porque..¿qué pasa si no utilizo uno de los ejes de rotación en algunos casos?
Y otro problema..¿Qué pasa cuando no me bastan esas matrices y necesito definir alguna más?

Entonces...¿Cómo solucionariais el problema que SEGURO que os ocurre a todos?
                               
Título: La mejor forma de definir matrices es...
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                Hola Dracula,

Pues mira... con lo del numero de matrices, pues la verdad es que yo voy con las de escala, traslacion y quaternions para rotar, aunque mas matrices... como no quieras una matriz de color o de cualquier tipo...

en cuanto a lo de meter mas matrices, pues podrias tenerlas mas o menos de la siguiente manera:

typedef float matrix4[16];

typedef struct matrix
{
matrix4 m;
matrix *next;
} matrixnode;

y luego ir creando dinamicamente matrices si las necesitas, aunque no se si es lo que necesitas...

Saludos
_________________
Julio Meca
ALPHA SOFTWARE

[ Este Mensaje fue editado por: Emotion el 2002-04-18 20:26 ]

[ Este Mensaje fue editado por: Emotion el 2002-04-18 20:26 ]                                
Título: La mejor forma de definir matrices es...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Si piensas bien en mi ejemplo, verás lo siguiente. Imagina que tengo las matrices de RotX,RotY,Posicion

La matriz final=RotX*RotY*Posicion

Si hago una modificación en RotY, TENGO que recalcular toda la matriz.

Ahora bien, piensa este caso, en el que añado una matriz más:

La matriz final=RotX*RotY*RotZ*Posicion

Y ahora modifico la matriz Posicion. ¿Debo recalcular la multiplicación de RotX*RotY*RotZ cuando realmente no cambian?

Yo creo que no, es por ello que he planteado esta duda, porque creo que sería un punto de optimización importante y quizás la gente no se ha dado cuenta!
                               
Título: La mejor forma de definir matrices es...
Publicado por: Ithaqua en 01 de Enero de 1970, 01:00:00 AM
                                Y... ¿Para que necesitas tantas matrices y tantas operaciones?

                               
Título: La mejor forma de definir matrices es...
Publicado por: _Grey en 01 de Enero de 1970, 01:00:00 AM
                                Pues si Drácula, tienes que calcular otra vez las matrizes, a no ser que guardes el resultado de las matrizes que no cambien, entonces tendrias que calcular esa matriz semi-global por la matriz nueva, pero es un metodo muy "ortepedico", y segun casos no podras recurrir a el, asi pues, por norma, tendrias que calcular otra vez todas las matrizes.                                
Título: La mejor forma de definir matrices es...
Publicado por: ProD en 01 de Enero de 1970, 01:00:00 AM
                                Dracula, también puedes utilizar un pila de matrices, creo que la D3DX la implementa, echale un ojo, haber si es lo que estás buscando. Un saludo.
                               
Título: La mejor forma de definir matrices es...
Publicado por: mallrat en 01 de Enero de 1970, 01:00:00 AM
                                hola! no termino de entender para que quieres tener la posicion en una matriz... o yo me estoy liando. Supongo que tienes la posicion en un vector 3d, la escala también en un vector 3d, y la rotacion en euler o un cuaternio, y a partir de ahi calculas la matriz, no?

:agh:
                               
Título: La mejor forma de definir matrices es...
Publicado por: Hari en 01 de Enero de 1970, 01:00:00 AM
                                No veo la necesidad de mantener tantas matrices, porque al fin y al cabo se aplica una sola matriz de transformación, y si cambia algo, la tienes que recalcular. Yo mantengo los tres ángulos de rotación y un vector con su posición, aunque en cuestión de optimización todo dependerá de cada caso concreto.

Un Saludo.                                
Título: La mejor forma de definir matrices es...
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                No es que sea mi caso, sino que he expuesto un problema a ver qué soluciones se os ocurren, para ver si hay alguna óptima.                                
Título: La mejor forma de definir matrices es...
Publicado por: Ithaqua en 01 de Enero de 1970, 01:00:00 AM
                                Hombre, tener tantas matrices desde luego no es solución :sonriendo:
O bien post/pre multiplicas matrices, o bien vas modificando valores de posición/escalado/rotación y al final del cálculo de animación compones la matriz con todos esos valores.

Saludos

                               
Título: La mejor forma de definir matrices es...
Publicado por: _Grey en 01 de Enero de 1970, 01:00:00 AM
                                Pues la verdad es que yo, lo que tengo, no son las matrizes de rotacionX,Y,Z , de posicion y demas.... lo que tengo son los valores de rotacion, translacion, y escala como floats y luego creo la matriz y punto.                                
Título: La mejor forma de definir matrices es...
Publicado por: fiero en 01 de Enero de 1970, 01:00:00 AM
                                Hola,
Yo hago lo mismo que _Grey, y alguien más..., tengo valores para todos los parámetros y cuando tengo que transformar el objeto calculo la matriz. Creo que es más rápido ésto que tener un monton de matrices y multiplicarlas todas en serie.

Además calcular la matriz no conlleva un consumo de tiempo apreciable, comparado con transformar los vertices, etc... así que cualquier forma es válida, con tal que se aclare el que lo hace :riendo:, ya que no hay mucho que optimizar.

un saludo