projecção em perspectiva inversa
-
09-09-2019 - |
Pergunta
Eu estou usando
worldview_inverse * (projection_inverse * vector)
para transformar as coordenadas de espaço de tela em coordenadas espaciais mundiais. Presumi que
(x,y,1,1)
transformaria a um ponto no avião agora, enquanto
(x,y,-1,1)
transforma em um ponto no avião próximo, e ligar a linha I pode consultar todos os objetos no tronco vista que cruzam a linha. Após a transformação I dividir os pontos resultantes pelo respectivo componente .w. Isso funciona para a extrema-plano, mas o ponto no avião perto de alguma forma é transformada para a origem do espaço do mundo.
Eu acho que isso tem a ver com o w componentes de 1 Estou alimentam a projeção inversa, porque geralmente é 1 antes de projeção, não depois, e eu estou fazendo a projeção inversa. O que estou fazendo de errado?
Solução
Eu sei que esta é apenas uma solução, mas você pode deduzir o ponto de plano perto usando apenas o ponto de longe e a posição de visualização.
near_point = view_position
+ (far_point - view_position) * (near_distance / far_distance)
Quanto a você problema real. Em primeiro lugar, não se esqueça de dividir por W! Além disso, dependendo da sua matriz de projecção, tem que tentou (x, y, 0,1), em oposição a z = -1.
near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W