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)


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).


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.


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 |

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.


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.


11
Como eu comentei, as animações são erradas.
— Jari Komppa 31/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.