X, Y, Z coordenam padrões?


12

Eu sou muito novo no desenvolvimento 3D de qualquer tipo, no entanto, jogos. Ao ler os tutoriais e os exemplos, percebo que as coordenadas X / Y / Z parecem um pouco anteriores ao meu primeiro palpite.

Eu imaginava que se uma pessoa estivesse andando em torno de um campo, sua posição X / Y estaria mudando e se ela pulasse ou subisse ou subisse uma colina, então sua posição Z estaria mudando. Minhas suposições parecem estar erradas porque caminhar ao redor de um campo parece mudar X / Z e pular ou subir / descer uma colina altera o Y.

1) Minhas observações estão corretas? O 3D é novo para mim e talvez eu não esteja pensando nas coisas corretamente.

2) Qual é a lógica por trás do movimento horizontal sendo X / Z e o movimento vertical sendo Y?

3) Seria tão errado da minha parte usar X / Y como movimento horizontal e Z como movimento vertical no XNA Framework?


Sistemas de coordenadas esquerda / direita. O DirectX está à esquerda, o padrão no OpenGL é à direita.
Jonathan Connell

Respostas:


19

Suas suposições não estão erradas: cada mecanismo trata essas coordenadas de maneira diferente. De um modo geral, X é quase sempre o eixo Leste-Oeste, mas se Y ou Z é o eixo Altitude tende a variar. Pelo que entendi, o Quake 3, o Source Engine e o Torque engine têm Z como ativo. O mesmo acontece com a ferramenta de modelagem 3DS Max. Não é incomum.

Faz sentido ter um sistema de coordenadas ordenado aproximadamente em ordem decrescente de importância, para facilitar o entendimento de achatar uma representação em menos dimensões. Por exemplo, se o seu jogo estiver definido em um mapa de altura 2D, faz sentido que Z seja 'up', porque suas coordenadas X e Y no mapa do mundo 3D diretamente para as coordenadas X e Y no mapa de altura. Por outro lado, se você pensa principalmente em termos de renderização (e muitos desenvolvedores de mecanismos de jogos pensam), você está acostumado a X e Y serem as coordenadas da tela; portanto, adicionar um terceiro eixo naturalmente entra ou sai da tela.

Use o que for mais fácil para você, mas lembre-se de que qualquer escolha é arbitrária e que você pode precisar converter entre eles e usar vários sistemas de coordenadas em um programa.


Na verdade, eu gosto mais das outras duas respostas, mas como essa é a resposta aceita, uma observação para apontar que o Y sendo vertical e o Z sendo na tela é a maneira como a maioria das APIs de hardware 3D é configurada para funcionar (DirectX e OpenGL) . Se você deseja seu próprio sistema, esteja ciente disso, pois algumas traduções podem ser necessárias. (Algo usados de forma inadequada, mas de forma consistente pode, muitas vezes trabalho como desejado, daí o 'pode ser' :))
James

1
Tecnicamente, o OpenGL tem Z saindo da tela por padrão, quando você inclui a direção, portanto, embora ele e o DirectX tenham Z paralelo à direção da visualização, eles ainda são incompatíveis! Ao trabalhar com 3D, você precisa ser competente para ir de um sistema de coordenadas para outro por meio de rotações, traduções e redimensionamento - de fato, é assim que os modelos acabam no mundo -, portanto, não faz muito sentido aderir a qualquer noção de padrão.
Kylotan

Apenas apontando para lidar com milhões de triângulos, talvez quanto menos você precise fazer para combater o sistema de coordenadas do hardware, melhor;) No final das contas, criar jogos é divertido, apesar dos níveis de estresse. Faça o que quiser: )
James

A noção de "Z" como entrar / sair da tela ou ser altitude é um pouco enganadora. Pode ser mais fácil conceituar as transformações. Nós enviamos coordenadas de vértices 3D / 4D que são transformadas eventualmente em espaço de janela 2D, mas com um valor de profundidade. A idéia de que uma API mapeia inerentemente as coordenadas 3D de X, Y ou Z para "profundidade" não é realmente correta - você pode criar qualquer transformação que troque o significado das coordenadas. No final dessa transformação, você ainda terá as coordenadas do espaço da janela 2D e um valor de profundidade.
22711 PatrickJ

1
No entanto, não tenho muita certeza de onde discordamos do resto: é claro que você pode usar qualquer espaço de coordenadas que quiser, desde que possa projetar x, y, profundidade no final, mas essa pergunta é principalmente sobre por que certas convenções existem para sistemas de coordenadas, e as convenções estão inevitavelmente ligadas a conceitos do mundo real.
Kylotan

6

Imagine olhar para um pedaço de papel estendido à sua frente com uma tabela, os eixos são tipicamente rotulados como X na parte inferior e Y na vertical; isso deixa Z como o eixo externo ao longo do solo.

É apenas uma convenção, mas é muito usada em gráficos onde pensamos em Z como a profundidade da cena.

Em outros campos como o CAD, sua versão seria mais comum.


4

A idéia é que os eixos xey permaneçam iguais - y é 'up' na tela e x é do outro lado.

z - a terceira dimensão, projeta-se de volta para a tela (ignorando as questões de entrega aqui). Em três dimensões, isso é um pouco estranho, mas para posicionar as coisas no espaço da tela, faz mais sentido.

3) Você pode, se quiser, mas seria doloroso e desajeitado. Eu recomendaria apenas se acostumar com os projetos-Z dentro / fora do monitor.


1

1) Sim, suas observações estão corretas.

2) O sistema global de coordenadas XYZ padrão faz sentido quando você pensa em termos de um jogo de tiro em primeira pessoa, quando olha através dos olhos de um personagem na cena com uma matriz de transformação em branco (identidade). Como quando você desenha um sistema de coordenadas em um pedaço de papel, X aponta para a direita e Y aponta para cima. De acordo com a regra da mão direita (x-> polegar, y-> dedo indicador, z-> dedo médio), Z aponta para você.

3) Não seria errado, mas seria um desvio dos padrões. Existem três problemas em que posso pensar no momento: (a) Digamos que um dia você queira usar uma biblioteca de física que use o quadro de coordenadas padrão. Se você não seguiu o padrão, agora precisa pensar na transformação que o leva do seu mundo para o mundo da física. Pode ser irritante quando você deseja corrigir um erro. (b) Quando você deseja compartilhar código com alguém ou trazer alguém para ajudar no desenvolvimento, eles precisam se acostumar com a sua convenção. (c) Ao usar modelos 3D padrão, você sempre deve ter uma transformação acima deles para impedir que olhem de lado.

Agora, para adicionar à pergunta 2, é muito útil pensar em X, Y e Z como não apenas três letras, mas também como certas, para cima e para trás. Todos os personagens da cena têm um sistema de coordenadas local anexado a eles e, em seus quadros de coordenadas locais, X está sempre certo, Y está ativo e Z está invertido. Depois de ter isso, agora você pode entender os vetores impressos ou escrever seus algoritmos de uma maneira que faça sentido. Digamos que você tenha dois caracteres A e B e queira fazer algo se um deles estiver voltado para o outro. Você pode simplesmente encontrar a localização de B no quadro de coordenadas de A (Ta ^ -1 * p_b), olhar para o vetor obtido e ver se Z (para trás) é negativo e X (à direita) e Y (para cima) são pequenos, porque esse vetor informa quanto, para trás e para a direita, B está em relação a A.

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.