Alterando o sistema de coordenadas de Z-up para Y-up

8

O sistema de coordenadas do Blender é diferente do que estou acostumado, em que Z aponta para cima em vez de Y. Qual seria a maneira mais simples de converter todos os dados do mundo (para que todas as animações, coordenadas de textura, etc. ainda funcionem), para que Y aponta para cima?

Esclarecimento:

As posições dos objetos são definidas como matrizes, portanto, apenas trocar informações de conversão / rotação / escala nas matrizes não é uma tarefa trivial. (pelo menos não me parece uma tarefa trivial)

Jari Komppa
fonte
Estou faltando alguma coisa, ou você poderia simplesmente trocar as cordas Z e Y?
The Duck Comunista
Esclarecimentos adicionados à pergunta.
Jari Komppa
Uma matriz posicional de objeto não é apenas uma matriz de coluna 1x4? Portanto, não seria fácil mudar os elementos? Eu cobri matrizes, mas não em termos específicos de jogos. : p
O pato comunista
São matrizes 4x4 planas com translação, rotação e escala aplicadas.
Jari Komppa
11
Se você está escrevendo seu próprio script python, pode usar bpy_extras.io_utils.axis_conversion (consulte: blender.org/documentation/blender_python_api_2_66a_release/… ). Afaik, o suporte para sistemas de coordenadas 'não Z up' no blender está planejado, mas a partir de agora (2.66a) ainda não foi implementado.
Exilyth 23/03/2013

Respostas:

2

Por que você não pode simplesmente criar a matriz de rotação para orientá-la corretamente na primeira parte da sua matriz mundial?

Se você deseja corrigi-lo ao carregar, crie a matriz de rotação para orientá-la corretamente (ou seja, 90 graus ao redor do eixo X). Aplique isso a todos os vértices e altere todas as matrizes existentes para (rotação * existente).

Jason Goemaat
fonte
Isso pode funcionar - aplique uma matriz de rotação de 90 'a tudo no momento da exportação.
Jari Komppa
Bem, eu perguntei para o mais simples maneira ..
Jari Komppa
7

Voto negativo se estiver errado, mas não vejo por que as pessoas recomendam a troca de y e z. Isso faria com que seu sistema de coordenadas fosse destro para canhoto. Tente você mesmo, troque y e z e reoriente o eixo para que x aponte para a direita e y aponte para cima. Você verá que z aponta na direção oposta ao original (longe da tela). A maneira correta é girar em torno do eixo x, que é trocar y e z, e depois inverter o sinal do z final.

Eu acho que a solução mais fácil é criar seus modelos com o valor y subindo.

5ound
fonte
11
Agora, então, como corrigir as matrizes de modo que "o sinal do z final" é invertido ..
Jari Komppa
11
Você não deseja consertar suas matrizes, deseja consertar seus dados, que é aplicar a transformação quando você ler os dados do modelo.
5ound
11
Mas os dados da animação são armazenados como matrizes, para que eles se movam em direções erradas. Portanto, os objetos apontam para direções corretas, mas as animações não.
Jari Komppa 02/02
5

Como o camarada Duck sugere, você pode simplesmente trocar Y e Z. Se precisar de uma matriz para fazer isso, use este:

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

ou em coordenadas homogêneas

| 1 0 0 0 |
| 0 0 1 0 |
| 0 1 0 0 |
| 0 0 0 1 |
ggambett
fonte
1

Se sua matriz é:

x
y
z
w

Então porque não:

temp = y
y = z
z = temp

Ou qualquer método de troca que você desejar.

O Pato Comunista
fonte
0

Quando você carrega suas malhas com o código do carregador de malha que está usando, basta alterar os valores Z e Y. A malha será carregada no seu jogo no espaço de coordenadas apropriado e você poderá fazer o que quiser (aplicar rotações, traduções, etc.). É uma situação semelhante que tive com o 3DS Max.

Ray Dey
fonte
11
Como eu comentei, as animações são erradas.
Jari Komppa 31/01