proiezione prospettica inversa
-
09-09-2019 - |
Domanda
sto usando
worldview_inverse * (projection_inverse * vector)
di trasformare lo spazio dello schermo in coordinate spaziali mondiali. Ho supposto che
(x,y,1,1)
avrebbe trasformato ad un punto sul piano di gran lunga, mentre
(x,y,-1,1)
trasforma in un punto sul piano vicino, e collegando la linea posso interrogare tutti gli oggetti nella troncoconica vista che intersecano la linea. Dopo la trasformazione Divido i punti risultanti dal rispettivo componente .w. Questo funziona per l'Estremo-piano, ma il punto sul piano vicino in qualche modo si trasforma all'origine spazio mondo.
Credo che questo abbia a che fare con i componenti w di 1 Sto immettono nella proiezione inversa, perché di solito è 1 Prima della proiezione, non dopo, e sto facendo la proiezione inversa. Che cosa sto facendo di sbagliato?
Soluzione
So che questa è solo una soluzione, ma si può dedurre il punto di aereo vicino utilizzando solo il punto lontano e la posizione di visualizzazione.
near_point = view_position
+ (far_point - view_position) * (near_distance / far_distance)
In quanto a te vero problema. In primo luogo, non dimenticate di dividere per W! Inoltre, a seconda della matrice di proiezione, hai provato (x, y, 0,1) al contrario di z = -1.
near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W