Оптимизировать отбор Frustum

Я пишу игру на C++, и у меня есть уровень, состоящий из множества отдельных сеток, каждая из которых имеет свой собственный буфер вершин. я использую vmmlib (блестящий бесплатный gl compat. vector/matrix library), чтобы создать свой сборщик frustum и проверять его на ограничивающей сфере каждой сетки на уровне. к сожалению, мой уровень может состоять из 800 ячеек, и каждый из них проходит каждый кадр медленно. Каков наилучший способ оптимизации кода, чтобы мне не приходилось просматривать все сетки на каждой итерации? Ограничение объемов внутри усеченного конуса?

3 ответа

Решение

Да, ограничивающий объект - это то, что вам нужно, вы должны позаботиться о выборе подходящего ограничивающего объема, например, для мешей, которые перемещаются по сцене, таких как боты, и не ложитесь, цилиндр - лучший объем, другие лучше представлены в виде кубов (ось). выровнен или нет).

Затем вы создаете квадродерево или октодерево для иерархического разделения данных меша.

Это очень хорошо работает при отбраковке наружных ограждений.

Для внутреннего использования BSP - лучший способ, так как у вас есть много стен, чтобы разделить ваше пространство. Вы должны по-прежнему ограничивать объем вашей сетки, которая имеет более 10 полигонов.

Я просто хотел добавить, что сейчас порталы дней, как правило, предпочтительнее BSP или в сочетании с ними, но у меня недостаточно репутации, чтобы редактировать исходное сообщение.

Разделение двоичного пространства или его двоюродный брат Quadtree.

Другие вопросы по тегам