Meilleur algorithme efficace pour la détection de collision entre les objets

Je suis confus. Bien de ne pas confondre, donc, bien que ne souhaitant pas faire les 6 programmes de test pour voir quel algorithme est le meilleur. J'ai donc pensé que je pourrais demander à mon expert amis ici AFIN de me donner l'avantage de leur expérience.

Le scénario est une scène 3d avec potentiellement une grande surface par rapport à la taille des objets à l'intérieur. Il y a potentiellement des milliers d'objets dans la scène. Les objets varient en taille de dixièmes d'une unité jusqu'à 10 unités, mais pas plus grand (ou plus petit). Les objets ont tendance à être regroupés, mais ces clusters peuvent potentiellement apparaître n'importe où dans la scène. Tous les objets sont dynamique et en mouvement. Les Clusters ont tendance à se déplacer ensemble, mais quand ils font leurs vitesses ne peut pas être le même tout le temps. Il y a aussi la géométrie statique à prendre en compte. Bien qu'il existe un grand nombre d'objets dynamiques, il y a aussi quelques objets statiques dans la scène (les objets statiques, ont tendance à être d'un ou deux ordres de grandeur plus grand que les objets dynamiques).

Maintenant, ce que je veux, c'est une des données spatiales de la structure pour l'exercice efficace de détection de collision pour tous les éléments de la scène. Ce serait formidable si l'algorithme est également pris en charge la visibilité de requête trop, pour le pipeline de rendu. Par souci de simplicité, supposons que la détection de collision est ici large de phase (c'est à dire tous les objets dynamiques sont tout simplement parfait sphères).

Donc, dans ma recherche, je peux utiliser l'un des:

(1) de l'Octree
(2) En Vrac De L'Octree
(3) Linéaire de l'Octree (+ loose)
(4) KD Tree
(5) BSP Tree
(6) le Hachage

Jusqu'à présent (6) est le seul que j'ai essayé. C'est en fait tout à fait superbe en termes de vitesse (8192 éléments de collision vérifié en moins de 1ms sur mon système) si les objets de la scène sont, en moyenne, répartis de façon égale. C'est pas un bon algorithme si tous les objets d'obtenir couped dans une zone plus petite, qui, je suppose, est possible.

Quelqu'un aperçu de laquelle utiliser, ou tout trucs que je peux employer pour accélérer les choses? Je pense que quoi qu'il arrive je peux juste utiliser un arbre BSP pour la géométrie statique. Je suppose que la dynamique de "sphères" est ce qui me préoccupe le plus ici. Note: pas de CUDA, c'est CPU :p.

Grâce

EDIT: Ok, merci pour Floris, j'ai trouvé plus d'informations sur l'AABB Arbres. Il y a une vieille discussion sur GameDev ici: http://www.gamedev.net/topic/308665-aabb-tree---wheres-the-poly-o_o/. Ressemble à un bon compromis.

Final EDIT: a Décidé de ne pas réinventer la roue. Il est possible que la puce de la physique de la bibliothèque va faire tout cela pour moi (il a AABB arbre, probablement, très bien optimisé trop).

  • Vous pouvez probablement passer KD-tree pour les scènes dynamiques. KD tree de travail sur la statique des ensembles de données, vous devez reconstruire l'ensemble de la (sous -) arbre chaque fois qu'un seul élément déplacé
  • Oui, il a regardé comme il était trop intensive à l'utilisation dans des scènes dynamiques.
InformationsquelleAutor Robinson | 2011-08-18