Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





La mejor forma de definir matrices es...

Iniciado por Drácula, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Drácula

                                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?
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Emotion

                                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 ]                                
G3: Get the Power!

Drácula

                                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!
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Ithaqua

                                Y... ¿Para que necesitas tantas matrices y tantas operaciones?

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

_Grey

                                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.                                

ProD

                                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.
                               
as ideas son capitales que sólo ganan intereses entre las manos del talento

mallrat

                                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:
                               

Hari

                                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.                                

Drácula

                                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.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Ithaqua

                                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

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

_Grey

                                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.                                

fiero

                                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                                
www.videopanoramas.com Videopanoramas 3D player






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.