Я в замешательстве. Не путайте, так как не хотите делать 6 тестовых программ, чтобы увидеть, какой алгоритм является лучшим. Поэтому я подумал, что попрошу моих экспертов-друзей здесь, в SO, чтобы дать мне преимущество от их опыта.
Сценарий представляет собой трехмерную сцену с потенциально довольно большой площадью по сравнению с размерами объектов внутри нее. На сцене есть потенциально тысячи объектов. Объекты варьируются от 10 до 10 единиц, но не больше (или меньше). Объекты, как правило, группируются вместе, но эти кластеры могут потенциально появляться в любом месте сцены. Все объекты динамичны и движутся. Кластеры, как правило, движутся вместе, но когда они делают, их скорости могут быть не одинаковыми все время. Там также рассмотрена статическая геометрия. Хотя существует большое количество динамических объектов, в сцене также есть некоторые статические объекты (статические объекты имеют тенденцию быть на один или два порядка больше, чем динамические объекты).
Теперь я хочу создать пространственную структуру данных для эффективного выполнения обнаружения столкновений для всех элементов сцены. Было бы здорово, если бы алгоритм также поддерживал запрос видимости для конвейера рендеринга. Для простоты предположим, что обнаружение столкновений здесь является широкофазным (т.е. Все динамические объекты являются просто идеальными сферами).
Итак, в моих исследованиях я могу использовать один из:
(1) Octree (2) Loose Octree (3) Линейный Octree (+ свободный) (4) Дерево KD (5) Дерево BSP (6) Хеширование
До сих пор (6) - единственный, который я пробовал. Это на самом деле абсолютно превосходно с точки зрения скорости (8192 столкновений элементов проверено под 1 мс в моей системе), если объекты в сцене в среднем равномерно распределены. Это не такой хороший алгоритм, если все объекты попадают в меньшую область, что, я полагаю, возможно.
Есть ли у кого-нибудь представление о том, какой из них использовать, или какие-нибудь трюки, которые я могу использовать для ускорения? Я думаю, что, что бы ни случилось, я могу просто использовать отдельное дерево BSP для статической геометрии. Я полагаю, что здесь наиболее важны динамические "сферы". Примечание: нет CUDA, это только процессор: p.
Спасибо
EDIT: Хорошо, благодаря Флорису, я нашел дополнительную информацию о деревьях AABB. Здесь есть старая дискуссия о GameDev: http://www.gamedev.net/topic/308665-aabb-tree---wheres-the-poly-o_o/. Похож на хороший компромисс.
Final EDIT: решил не изобретать велосипед. Возможно, библиотека физики пули сделает все это для меня (в ней есть дерево AABB, возможно, очень хорошо оптимизировано).