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?
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 ]
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!
Y... ¿Para que necesitas tantas matrices y tantas operaciones?
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.
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.
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:
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.
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.
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
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.
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