Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





XYZ EN DX

Iniciado por x-alien, 02 de Enero de 2003, 01:54:42 AM

« anterior - próximo »

x-alien

                                pues tengo un problema k tengo desde k programo en opengl y dx...

en el max los modelos tiene como eje 'z' la altura y como profundidad 'y'...
en direct3d es al reves... 'y'= altura y 'z', profundidad.

hasta ahora la camara la ponia de tal modo k simulara k el 'z' es el alto.
luego me harte, y giraba los modelos del max y los ponia como tienen k salir en dx... eje 'y' para la altura...

pero cuando ya los modelos son complejos, con bones , animaciones etc... trabajar de ese modo en el max es morirse.... muy incomodo..

la pregunta es... ¿como puedo hacer k el d3d, tenga el mismo eje de coordenadas k en el max5, maya, lightwave etc?... por comodidad...
tal vez es una pregunta tonta y facilita pero no se cual podria ser la solucion...
me gustaria ver si alguno de uds cambia el eje k codigo usais, thx.


 DIRECTX.................3DMAX, MAYA,LIGHTWAVE
.....y..............................z
.....|...............................|
.....|____x......................|_____x
..../.............................../
../.............................../
z...............................y

int y,z;
y=z;
z=y;
me parece un absurdo, de ahi mi duda... la vida de autodidacta es dura... kien me explica esto?                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

BeRSeRKeR

                                En el contenido de la documentación de las DX tienes un apartado en la ruta DirectX Graphics/Programming Guide/Getting Started with Direct3D/3-D Coordinate Systems and Geometry/3-D Coordinate Systems donde te explica los pasos para realizar conversiones entre distintos sistemas de coordenadas (entre ellos habla de los de los programas de modelado). También puedes ver esta sección en las MSDN online. Aquí tienes la dirección http://msdn.microsoft.com/library/en-us/di....asp?frame=true

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

x-alien

                                ya me lo mire, pero no saco conclusion alguna

esto de aki lo entiendo...

Flip the order of triangle vertices so that the system traverses them clockwise from the front. In other words, if the vertices are v0, v1, v2, pass them to Direct3D as v0, v2, v1.
Use the view matrix to scale world space by -1 in the z-direction. To do this, flip the sign of the _31, _32, _33, and _34 member of the D3DMATRIX structure that you use for your view matrix.

......pero esto cambia de left handed a right handed, el dx usa left handed coordinates.... el problema surge cuando kiero k el 'z' sea el 'y' y 'y' sea 'z'.



usare el deep exploration,( el mejor convertidor a otros formatos graficos k hay), espero resolver esta duda algun dia... si alguien ha puesto el eje de coordenadas como yo kiero, plz pegar el codigo fuente y explicarlo.
mientras tanto seguire usando el deep exploration =(


saluos y thx                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

BeRSeRKeR

                                MAX utiliza un sistema Left-Handed como D3D la única diferencia es que, como has dicho en tu primer post, en D3D la Y positiva va hacia arriba mientras que en MAX la Y positiva va hacia "dentro del monitor".

Entonces, para la conversión tienes dos opciones. Si tienes tu propio formato, puedes intercambiar la Y y la Z a la hora de la exportación. Pero si no es el caso, hay que realizar esa rotación adicional de la que habla la documentación de las DX. Esa rotación debería ser una de 90º en el eje X y otra de 180º en el eje Y. Dicha rotación supongo que tendrás que aplicarla cada vez que vayas a dibujar. Así por ejemplo, al pintar un objeto (creado con el sistema de coordenadas de MAX), tendriamos que especificar su matriz de transformacion como:

matRot90X_180Y = matRot90X * matRot180Y (esta rotación se puede precalcular para ahorrar operaciones por cada frame)

matWorld = matRot90X_180Y [* matObjRot * matObjPos]

lo que hay entre corchetes es opcional...son las transformaciones propias de cada objeto...

...pues nada mas, algo así debería ser, pero no lo he probado para poder asegurarlo :-?

A ver si eso ayuda...

Saludos.                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!






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.