Pergunta

Estou fazendo uma simulação por trás das cortinas 3d durante a prestação do mundo em meu motor isométrica 2D. Eu nunca fiz um motor isométrica antes, e minha matemática matriz está enferrujado, em geral, por isso estou tendo problemas.

I têm uma matriz de projecção, que na sua forma mais simples é a seguinte:

 0.7       0.35     0
 0        -0.87     0
-0.71      0.35     1

Um par de sinais são invertidos porque meus motores de sistema de coordenadas é 0,0 no canto superior esquerdo, com + X para a direita / leste e + Z para o sul.

Agora, o inverso do que é:

1.4080  0.5670   0.0000
0.0000 -1.1490   0.0000
1.0000  0.8050   1.0000

Agora, essas matrizes principalmente trabalho.

Por exemplo

WC: 500,0,500 = Tela: -1,44, 350, 500 (X e Y são correcta)

WC: 0,0,500 = Tela: -355, 175, 500 (X e Y são correcta de novo)

Mas, agora, se você precisa ir para o outro lado, você já não tem que calhar valor Z, então

Tela: -1,44, 350, 0 = WC: -2, -402,97, 0 (. Assim, o lixo)

E muito mais -., Logo que eu já não tenho esse valor Z, não posso recuperar as coordenadas mundo dos coords tela

Qual é a solução aqui?

Editar

Gostaria de salientar que o ponto do unproject é obter um raio para a colheita do mouse ..

Parece que é apenas a minha percepção equivocada de que eu estava fazendo que estava me enroscando-se aqui.

Foi útil?

Solução

Como você descobriu, as costas de conversão para o espaço 3D requer algum tipo de coordenada Z para fazer qualquer sentido.

Gostaria de sugerir que você faz a transformação inversa duas vezes . Uma vez com uma coordenada Z perto da tela (mais próximo do observador), e uma vez com uma coordenada Z na parte de trás de sua cena 3D. Estes dois pontos 3D iria dar-lhe uma linha 3D, que iria ocupar todas as posições "por trás" desse ponto 2D.

Outras dicas

Você não pode. está a projectar sobre a tela que perde informação.

Se você pensar sobre isso, várias coordenadas 3D se projetado sobre o mesmo ponto na tela, e apenas sabendo que coordenada de tela não é suficiente para recuperar o original de coordenadas.

[editar] olhando para suas coordenadas de tela, você dar-lhes tudo o z-value 0. que significa que as últimas colunas da sua matriz de projeção deve ter todos os zeros, fazendo que a matriz não invertível.

Cada pixel na tela representa uma linha do olho do observador no imaginário 3D mundo atrás da tela. Você tem que cruzam essa linha com o que os objetos podem se escondem nesse mundo a fim de obter coordenadas 3D.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top