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