Sto cercando di capire come implementare un albero KD.
A pagina 322 di "Rilevamento delle collisioni in tempo reale" di Ericson
La sezione di testo è inclusa di seguito nel caso in cui l'anteprima del libro di Google non ti consenta di vederla quando fai clic sul link
Sezione pertinente:
L'idea di base dietro l'intersezione di un raggio o di un segmento di linea diretta con un albero kd è semplice. La linea viene intersecata rispetto al piano di divisione del nodo e viene calcolato il valore t dell'intersezione. Se t è all'interno dell'intervallo della linea, 0 <= t <= tmax, la linea si trova a cavallo del piano e entrambi i figli dell'albero sono discendenti ricorsivamente. In caso contrario, viene visitata in modo ricorsivo solo il lato contenente l'origine del segmento.
Quindi, ecco quello che ho: ( apri l'immagine in una nuova scheda se non riesci a vedere le lettere)
L'albero logico
Qui il raggio arancione attraversa la scena 3d. Le x rappresentano l'intersezione con un piano. Da SINISTRA, il raggio colpisce:
- La faccia frontale del cubo che racchiude la scena,
- Il (1) piano di divisione
- Il (2.2) piano di divisione
- Il lato destro del cubo che racchiude la scena
Ma ecco cosa succederebbe, seguendo ingenuamente la descrizione di base di Ericson sopra:
- Prova contro piano di scissione (1). Il raggio colpisce il piano di divisione (1), quindi i figli sinistro e destro del piano di divisione (1) sono inclusi nel prossimo test.
- Prova contro piano di scissione (2.1). Ray effettivamente colpisce quell'aereo (molto più a destra), quindi entrambi i bambini sono inclusi nel prossimo livello di test. (Questo è contro-intuitivo - non dovrebbe essere incluso solo il nodo inferiore nei test successivi)
Qualcuno può descrivere cosa succede quando il raggio arancione attraversa correttamente la scena?