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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top