Cambio del sistema de coordenadas de Z-up a Y-up

8

El sistema de coordenadas de Blender es diferente de lo que estoy acostumbrado, ya que Z apunta hacia arriba en lugar de Y. ¿Cuál sería la forma más sencilla de convertir todos los datos mundiales (para que todas las animaciones, coordenadas de textura, etc. sigan funcionando) para que Y apunta hacia arriba?

Aclaración:

Las posiciones de los objetos se definen como matrices, por lo que simplemente cambiar la información de traducción / rotación / escala en las matrices no es una tarea trivial. (al menos no me parece una tarea trivial)

Jari Komppa
fuente
¿Me estoy perdiendo algo, o podrías cambiar los cables Z y los Y?
El pato comunista
Se agregó una aclaración a la pregunta.
Jari Komppa
¿No es una matriz posicional de objeto solo una matriz de columna 1x4? Entonces, ¿no sería fácil cambiar los elementos? He cubierto matrices, pero no en términos específicos de gamedev. : p
El pato comunista
Estas son matrices planas de 4x4 con traslación, rotación y escala aplicadas.
Jari Komppa
1
Si está escribiendo su propio script de python, puede usar bpy_extras.io_utils.axis_conversion (consulte: blender.org/documentation/blender_python_api_2_66a_release/… ). Afaik, el soporte para sistemas de coordenadas 'no Z up' en Blender está planeado, pero a partir de ahora (2.66a) aún no está implementado.
Exilyth

Respuestas:

2

¿Por qué no puedes simplemente hacer la matriz de rotación para orientarla correctamente la primera parte de tu matriz Mundial?

Si desea arreglarlo al cargar, cree la matriz de rotación para orientarla correctamente (es decir, 90 grados alrededor del eje X). Aplique esto a todos los vértices, luego cambie todas las matrices existentes a (rotación * existente).

Jason Goemaat
fuente
Esto podría funcionar: aplique una matriz de rotación de 90 'a todo en el momento de la exportación.
Jari Komppa
Bueno, pedí la forma más simple ...
Jari Komppa
7

Si me equivoco, me vota abajo, pero no veo por qué la gente recomienda intercambiar y y z. Eso haría que su sistema de coordenadas sea diestro o zurdo. Pruebe esto usted mismo, intercambie las y y z, y reoriente el eje para que x apunte hacia la derecha e y apunte hacia arriba. Verá que z apunta en la dirección opuesta a su original (lejos de la pantalla). La forma correcta es rotar alrededor del eje x, que es intercambiar y y z, y luego invertir el signo de la z final.

Creo que la solución más fácil es construir sus modelos con su valor.

5ound
fuente
1
Ahora bien, cómo arreglar las matrices para que "el signo de la z final" se invierta ..
Jari Komppa
1
Usted no quiere arreglar sus matrices, que desea corregir sus datos, que es la aplicación de la transformación cuando se lee los datos del modelo en.
5ound
1
Pero los datos de la animación se almacenan como matrices, por lo que se moverán en direcciones incorrectas. Entonces, los objetos apuntan a las direcciones correctas, pero las animaciones no lo harán.
Jari Komppa
5

Como sugiere el camarada Duck, puede intercambiar Y y Z. Si necesita una matriz para hacerlo, use esta:

| 1 0 0 |
| 0 0 1 |
| 0 1 0 |

o en coordenadas homogéneas

| 1 0 0 0 |
| 0 0 1 0 |
| 0 1 0 0 |
| 0 0 0 1 |
ggambett
fuente
1

Si su matriz es:

x
y
z
w

Entonces, ¿por qué no?

temp = y
y = z
z = temp

O cualquier método de intercambio que desee.

El pato comunista
fuente
0

Cuando cargue sus mallas con cualquier código de cargador de malla que esté usando, simplemente cambie los valores Z e Y. La malla se cargará en su juego en el espacio de coordenadas apropiado y puede hacer lo que quiera (aplicar rotaciones, traducciones, etc.). Es una situación similar que tuve con 3DS Max.

Ray Dey
fuente
1
Como comenté, las animaciones se arruinan.
Jari Komppa