Scatole limitanti in ocre


9

Ho visto che gli ocre sono spesso usati per cose come l'abbattimento del frustum e il rilevamento delle collisioni in 3D. Ma non sono sicuro di come funzioni l'algoritmo. Sicuramente l'intero principio dell'ottava si rompe quando si tenta di utilizzare i riquadri di delimitazione, poiché ogni dato riquadro potrebbe essere memorizzato in un nodo ma in realtà si sovrappone allo spazio rappresentato da un altro nodo. Inoltre, non sono sicuro di come questo possa funzionare per cercare riquadri di delimitazione piuttosto che punti, perché, di nuovo, potresti rimanere bloccato a cercare virtualmente tutti i nodi, vanificando lo scopo.

Quindi, come mai gli ocre fanno fronte alle scatole di delimitazione?

Risposte:


12

Un Octree (3D) utilizza gli stessi concetti di un Quadtree (2D). Se leggi e capisci l'articolo di Wikipedia su Quadtrees, dovresti essere in grado di applicare gli stessi concetti in 3D.

Entrambi questi alberi consentono di utilizzare ricerche basate sull'area che possono ridurre notevolmente il numero di confronti necessari per capire quali oggetti si trovano in una determinata area. Questo può essere utile per l'abbattimento, o anche per le collisioni, a seconda del gioco.

Il concetto di base è che lo spazio-mondo è diviso in "secchi": quadrati per 2D o cubi per 3D. Con un mondo vuoto, inizi con un singolo secchio quadrato o cubo che copre l'intero mondo. Man mano che aggiungi oggetti al mondo, inizi dal nodo principale e ti fai strada nell'albero in base alla posizione e alle dimensioni dell'oggetto. Se il bucket di destinazione raggiunge la capacità, lo si suddivide suddividendo i quadrati in 4 quadrati più piccoli (Quadtree) o dividendo i cubi in 8 cubi più piccoli (Octree). Ogni oggetto che aggiungi al mondo viene inserito solo nella profondità dell'albero in quanto può adattarsi fisicamente completamente all'interno dei limiti del secchio. Se un oggetto non rientra nei limiti del bucket corrente, è necessario spostare l'oggetto nel bucket parent più piccolo in cui si adatta completamente.

Nota che usare Quadtree o Octree è eccessivo se non hai molti oggetti nel tuo mondo. Esistono anche soluzioni open source per entrambi.


Penso che lo sappia. Credo che la confusione riguardi come gestire un volume che non si adatta bene a una suddivisione.
ClassicThunder

2
Cito che "Se un oggetto non rientra nei limiti, deve essere memorizzato di un livello". E sembrava anche che l'OP fosse un po 'confuso su come Octrees funzionasse in generale, basato sulla sua seconda frase.
John McDonald

Ciò non viola il vincolo fondamentale delle ocre, che ci sono solo sette o meno in ciascun nodo?
DeadMG

Voglio dire, se avessi N oggetti che giacciono lungo il confine, allora guarderei i controlli O (N) per verificare con ciascuno di essi.
DeadMG

@DeadMG, "Oct" come in Otto (Octagon, Octane, ecc.). Quando il nodo radice si divide, avrà 8 figli: Nord Est Su, Nord Est Giù, NWU, NWD, SEU, SED, SWU e SWD per un totale di 9 nodi incl. la radice. Se uno di questi nodi figlio si divide, quel nodo avrà anche 8 sottonodi, uno per ciascun quadrante come prima, per un totale di 8 + 8 + 1 = 17 nodi. Se tutti i tuoi oggetti si adattano perfettamente al limite del nodo radice e non rientrano in nessuno degli 8 quadranti, sì, sarà O (N) e dovrai controllare contro ogni oggetto e non potrai salvare alcun a confronto, infatti avrà un costo.
John McDonald

3

Gli n-alberi sono il più famoso ma non l' unico sistema di partizionamento spaziale disponibile. Ce ne sono molti, molti altri. Un po 'più di informazioni sui dati in tuo possesso farebbe molto per trovare la scelta migliore. Le tue scatole cambiano dimensione o si spostano? Quanto sono grandi? Quanti sono lì? Hai molti inserimenti / rimozioni?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.