Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





3dsmax To Opengl

Iniciado por Lord Trancos 2, 15 de Junio de 2005, 11:51:50 PM

« anterior - próximo »

Lord Trancos 2

 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.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Lord Trancos 2

 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:  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos 2

 Weno.... he dicho... "parece que rula"... jejeje todavia no esta bien probado.

Solo por curiosidad, ¿como lo haces para Direct3D?
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos 2

 Ok. Gracias. ;)

Si mi "truco" me falla, ya tengo donde agarrarme.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Lord Trancos 2

 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)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos 2

 
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)?
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

BeRSeRKeR

 
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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos 2

on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)






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.