Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Algo de álgebra

Iniciado por Hari, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Hari

                                Hola a todos,

Os mando a todos un saludo, ya que hace bastante tiempo que no entro por el chat por cuestiones laborales.

Así que vamos a probar el foro :sonriendo:

Necesito convertir una matriz de transformación en "right-handed" a "left-handed", ¿alguien lo ha hecho? ¿hay que descomponerla primero en sus respectivas rotación, traslación y escala?

Gracias y un saludo.                                

_Grey

                                Usar "right-handed" o "left-handed", es algo anterior a crear la matriz, pero te bastara con invertir el valor de Z, de positivo a negativo y a la inversa.

Chao.                                

Hari

                                En este caso no es antes, importando de un formato que almacena la geometría en "right-handed", puedo convertir los vertices, las coord. de textura, etc, pero la matriz de transformación está en "right-handed", por eso debo transformarla a posteriori, por eso la pregunta.

Gracias y un saludo.                                

BeRSeRKeR

                                Creo que a las únicas matrices que les afecta el sistema de coordenadas utilizado es a la de vista y a la de proyección...¿me equivoco?

Un saludo
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Drácula

                                Creo que lo que quiere decir es que él tiene un sistema de coordenadas, pero carga objetos con diferentes sistemas de coordenadas y quiero convertirlos al que él utiliza.

Algo así como cuando cargas un objeto de 3DS en DirectX, que debes invertir la Z. Pero ya le han respondido a eso anteriormente.

¿me equivoco?                                
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

_Grey

                                Exactamente, "importando de un formato que almacena la geometría en "right-handed"", si el caso es este deberias invertir la coordenada Z, pero ten en cuenta que algunos modeladores usan "right-handed" o "left-handed", y ademas combian la de sentido las coordenadas, yo me e encontrado con algun modelador(no recuerdo ahora cual...) que usaba la Y como si fuese la Z, en cualquier caso cuando veas la maya veras los cambios que le tienes que aplicar, y como te e contado, un cambio de "mano" es invirtiendo el valor de Z.                                

Hari

                                Exactamente, el caso en concreto es el que comenta Dracula (3ds -> dx), igual es que no estoy interpretando bien la información que da en LOCAL_MATRIX, pero según he visto por ahí almacena la matriz de transformación del objeto. Con respecto a lo que me comentas _Grey, las dos formas de convertir de un sistema de coordenadas de right a left son las que dices, o cambias la y por la z, con lo cual rotas el objeto, o inviertes la z, correcto, yo he implementado las dos y funcionan, el problema que comentaba es el siguiente, igual no me he explicado con claridad. Supongamos que tenemos una matriz de transformación en "left", centremonos en la traslación, sabemos que la x,y,z están respectivamente en la [4,1] [4,2] [4,3], obviamente si al transformar de "right" los vertices invertimos z o alternamos la y por la z, la matriz de transformación en ese sistema de coordenadas no nos sirve después de hacer el cambio; y este caso es el mas sencillo, ya que si hablamos de rotaciones por eje ya la matriz se va complicando. Entonces, mi pregunta es sencilla, y centremonos en la solución de invertir la z, ¿habrá que realizar alguna conversión a la matriz original, no? De hecho, es que hay algunos objetos que no me salen correctamente situados, y creo casi con toda seguridad, por lógica, que la matriz de transformación no puede seguir siendo válida si estamos invirtiendo o sustituyendo el orden de los vertices.

Gracias y un saludo.                                

Ryuchan

                                Bueno, pues yo tuve ese problema y a base de ir probando saque los pasos a seguir.
Quiza se puede hacer de otra manera, pero esta funciona:

- Rotar -90º en X
- Rotar 90º em Y
- Escalar por (-1,1,1) Invertir la componente X
- Invertir las normales del modelo

Pruebalo a ver si te furrula.                                
he fight is everything






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.