Unprojecting um no ponto de tela de volta para um mundo isometrically projetada
-
06-09-2019 - |
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
Mas, agora, se você precisa ir para o outro lado, você já não tem que calhar valor Z, então
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.
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.