Boîtes englobantes en octrees

9

J'ai vu que les octrees sont souvent utilisés pour des choses comme l'abattage du tronc et la détection de collision en 3D. Mais je ne sais pas du tout comment fonctionne l'algorithme. Certes, le principe entier de l'octree se casse lorsque vous essayez d'utiliser des boîtes englobantes, car toute boîte donnée peut être stockée dans un nœud mais chevauche en fait l'espace représenté par un autre nœud. De plus, je ne sais pas comment cela peut éventuellement fonctionner pour rechercher des boîtes englobantes plutôt que des points, car encore une fois, vous pourriez être bloqué en regardant pratiquement tous les nœuds, ce qui irait à l'encontre du but.

Alors, comment diable les octrois font-ils face aux boîtes englobantes?

DeadMG
la source

Réponses:

12

Un Octree (3D) utilise les mêmes concepts qu'un Quadtree (2D). Si vous lisez et comprenez l'article de wikipedia sur Quadtrees, vous devriez pouvoir appliquer les mêmes concepts en 3D.

Ces deux arborescences vous permettent d'utiliser des recherches par zone qui peuvent réduire considérablement le nombre de comparaisons nécessaires pour déterminer quels objets se trouvent dans une certaine zone. Cela peut être utile pour l'abattage visuel, ou même pour les collisions, selon votre jeu.

Le concept de base est que l'espace-monde est divisé en "seaux": carrés pour 2D ou cubes pour 3D. Avec un monde vide, vous commencez avec un seul seau carré ou cube qui couvre le monde entier. Lorsque vous ajoutez des objets au monde, vous commencez au nœud racine et progressez dans l'arborescence en fonction de l'emplacement et de la taille de l'objet. Si le compartiment de destination atteint sa capacité, vous le subdivisez en divisant les carrés en 4 carrés plus petits (Quadtree) ou en divisant les cubes en 8 cubes plus petits (Octree). Chaque objet que vous ajoutez au monde est uniquement inséré aussi profondément dans l'arbre qu'il peut physiquement s'insérer complètement dans les limites du seau. Si un objet ne rentre pas dans les limites du compartiment actuel, vous devez déplacer l'objet vers le plus petit compartiment parent dans lequel il rentre complètement.

Notez que l'utilisation d'un Quadtree ou d'un Octree est exagérée si vous n'avez pas beaucoup d'objets dans votre monde. Il existe également des solutions open source pour les deux.

John McDonald
la source
Je pense qu'il le sait. Je crois que la confusion concerne la façon de gérer un volume qui ne rentre pas bien dans une subdivision.
ClassicThunder
2
Je mentionne que "Si un objet ne rentre pas dans les limites, il doit être stocké d'un niveau vers le haut". Et il semblait également que l'OP était un peu confus quant à la façon dont Octrees fonctionnait en général, sur la base de sa deuxième phrase.
John McDonald
Cela ne viole-t-il pas la contrainte fondamentale des octrees, à savoir qu'il n'y en a que sept ou moins dans chaque nœud?
DeadMG
Je veux dire, si j'avais N objets qui se trouvaient le long de la frontière, alors je regarderais les vérifications O (N) pour comparer avec chacun d'eux.
DeadMG
@DeadMG, "oct" comme dans huit (octogone, octane, etc.). Lorsque le nœud racine se divise, il aura 8 enfants: North East Up, North East Down, NWU, NWD, SEU, SED, SWU & SWD pour un total de 9 nœuds incl. la racine. Si l'un de ces nœuds enfants se divise, ce nœud aura également 8 sous-nœuds, un pour chaque quadrant comme précédemment, soit un total de 8 + 8 + 1 = 17 nœuds. Si tous vos objets s'adaptent directement sur la limite du nœud racine et ne rentrent dans aucun des 8 quadrants, oui, ce sera O (N) et vous devrez vérifier contre chaque objet et vous ne pourrez pas en enregistrer compare, en fait, cela coûtera probablement.
John McDonald
3

Les n-arbres sont le système de partitionnement spatial le plus connu mais pas le seul disponible. Il y en a beaucoup, beaucoup d'autres. Un peu plus d'informations sur les données dont vous disposez contribuerait grandement à trouver le meilleur choix. Vos boîtes changent-elles de taille ou se déplacent-elles? À quel point sont-ils gros? Combien y en a-t-il? Avez-vous beaucoup d'insertions / suppressions?

espèce inconnue
la source