Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Lord Trancos 2 en 15 de Junio de 2005, 11:51:50 PM

Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 15 de Junio de 2005, 11:51:50 PM
 Actualmente para sacar coordenadas de 3DSMax para poder usarlas en OpenGL, hago lo siguiente:


               WriteFloat _f  -pos.x
               WriteFloat _f   pos.z
               WriteFloat _f   pos.y


Es decir, invierto la X, e intercambio Y por Z.

El problema es que no se que hacer con las quaternions...


               WriteFloat _f  q.w
               WriteFloat _f  q.x
               WriteFloat _f  q.y
               WriteFloat _f  q.z


Como deberia de transformarlas antes de exportarlas para usarlas desde OpenGL? :)

Assias de antemano.

pd. lo de arriba es codigo en maxscript.
Me gustaria exportar las quaternions ya transformadas para poder usarlas en OpenGL.
Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 16 de Junio de 2005, 12:15:14 AM
 jejeje... no se cuantas veces me habra pasado que despues de un buen rato intentando algo sin lograrlo,... pongo un post preguntando, y a los 5 minutos lo saco....  (nooo)

En fins... estoy probando asin...


              WriteFloat _f  -q.w
              WriteFloat _f  -q.x
              WriteFloat _f  q.z
              WriteFloat _f  q.y


... y parece que rula :rolleyes:  
Título: 3dsmax To Opengl
Publicado por: BeRSeRKeR en 16 de Junio de 2005, 12:58:34 AM
 Me parece demasiado simple pero bueno, tal vez las rotaciones de OpenGL sean más parecidas a las de MAX que en el caso de Direct3D.

Yo para conseguir el quaternion de MAX para Direct3D tengo que hacer muchas más cosas. Eso sí, no lo hago directamente con quaternions porque para mi al menos no son tan familiares como para eso. En su lugar hago la conversión sobre la matriz (que es algo más racional :D) y luego paso a quaternion.

Saludos.
Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 16 de Junio de 2005, 01:05:53 AM
 Weno.... he dicho... "parece que rula"... jejeje todavia no esta bien probado.

Solo por curiosidad, ¿como lo haces para Direct3D?
Título: 3dsmax To Opengl
Publicado por: BeRSeRKeR en 16 de Junio de 2005, 01:12:38 AM
 fn switchYZ v = (
   return [v.x, v.z, v.y]
)

fn quat_MAXToD3D q = (

   local mat = q as Matrix3

   local right = mat.row1
   local up = mat.row2
   local look = mat.row3

   right = switchYZ right
   up = switchYZ up
   look = switchYZ look

   mat.row1 = right
   mat.row2 = up
   mat.row3 = -look

   mat = inverse mat

   return (mat as quat)
)


Tal vez (seguramente :)) tengas que cambiar algún signo (por ejemplo quitar el menos del look) y tal vez no calcular la inversa de la matriz.

La verdad es que esa función me dió bastantes quebraderos de cabeza pero hasta ahora ha funcionado en todos los casos. La versión que exporta el quaternion de la cámara es igual sólo que no calcula la inversa...es que no es lo mismo un mesh que una cámara o una luz (utilizan sistemas de coordenadas diferentes)... :D

Saludos.
Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 16 de Junio de 2005, 09:24:41 AM
 Ok. Gracias. ;)

Si mi "truco" me falla, ya tengo donde agarrarme.
Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 17 de Junio de 2005, 08:51:12 PM
 Pues esta mañana haciendo pruebas mi truco ha "fallado".

Después de !!!mas de 5 horas!!!! pegandome de lexes con las putas rotaciones (tb habia probado el código que has puesto, con mil formas y variaciones)... va y me doy cuenta de que el problema era el gizmo del objeto en cuestion!!!!  (nooo)  (nooo)  (nooo)  (nooo)

Con un gizmo ""correcto"" mi "truco" parece seguir funcionando  <_<

...odio las mates...  (asco)  (asco)  (asco)  
Título: 3dsmax To Opengl
Publicado por: BeRSeRKeR en 17 de Junio de 2005, 10:38:08 PM
 Supongo que con el gizmo te refieres al pivot point que lo has alineado al sistema de coordenadas que te convenía...

Pensé en hacer eso yo también pero la verdad es que preferí no tener que involucrar al grafista en estas cuestiones y encontrar una solución que funcionara sin modificar nada. Eso sí, como dije es un poco follonero porque el sistema de coordenadas difiere entre un mesh (o una luz) y una cámara y tampoco sé a ciencia cierta si existe algún otro caso que difiera de los dos casos anteriores, por lo que lo ideal sería llegar a una fórmula que pasándole los 3 ejes de coordenadas te diga qué conversión realizar (que supongo que se podrá).

Saludos.
Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 17 de Junio de 2005, 11:45:32 PM
 
Citar
Supongo que con el gizmo te refieres al pivot point que lo has alineado al sistema de coordenadas que te convenía...

Si, me refiero al pivot point.

Pero no lo he alineado al sistema de coordenadas que me convenia; sino al que "tocaba".

Mi problema venia derivado a que por un lado exporto mediante un conversor ASE->MI FORMATO las geometrias, y con un maxscript exporto las animaciones (posicion+rotacion) de "dummies" "linkados" a los objetos; y el dummy en cuestion tenia un gizmo en unos ejes y el mesh lo tenia en otros ejes. Y yo sin darme cuenta :P

Tambien me he dado cuenta de una cosa probando; he creado un cubo y exportado a ASE con el gizmo normal, y tambien el mismo cubo con el gizmo rotado aleatoriamente.

En ambos ficheros ASE, los vertices estan alineados a los ejes de coordenadas (independientemen de que el gizmo no se encuentre alineado). Sin embargo; los vertices no estan en las mismas posiciones y hay un nodo llamado NODE_TM que guarda la rotacion del gizmo. :blink:

Todavia hay alguien que opine que el ASE es facil ?  <_<  

pd. ¿sabrias decirme como averiguar si el nombre de un nodo tiene una cadena de caracteres (en maxscript)?
Título: 3dsmax To Opengl
Publicado por: BeRSeRKeR en 17 de Junio de 2005, 11:49:37 PM
 
Cita de: "Lord Trancos 2"pd. ¿sabrias decirme como averiguar si el nombre de un nodo tiene una cadena de caracteres (en maxscript)?
Puedes utilizar la función findString. Te devuelve el índice del primer caracter de la cadena buscada y si no la encuentra te devuelve undefined.

Ej:

findString "Hola mundo cruel" "cruel"

te devolverá 12.

Saludos.
Título: 3dsmax To Opengl
Publicado por: Lord Trancos 2 en 17 de Junio de 2005, 11:51:50 PM
 gracias  (ole)