Некоторое время назад я изучал использование JMonkeyEngine , движка для 3D-игр, и посмотрел на некоторые методы, которые они используют.Из того, что я помню, они используют то, что называется выбраковкой.Они строят древовидную структуру всего, что существует в «мире».Идея заключается в том, что у вас есть подмножество этого дерева, которое представляет видимые объекты в любой момент времени.Другими словами, это те вещи, которые нужно визуализировать.Так, скажем, например, что у меня есть комната с объектами в комнате.Комната на дереве, и предметы в комнате - дети дерева.Если я нахожусь за пределами комнаты, то я обрезаю (удаляю) эту ветвь дерева, что означает, что я не рендерил ее.Причина, по которой это работает так хорошо, заключается в том, что мне не нужно оценивать КАЖДЫЙ объект в мире, чтобы увидеть, нужно ли его визуализировать, но вместо этого я быстро обрезаю целые части мира, которые, как я знаю, не следует визуализировать.
Еще лучше, тогда, когда я захожу в комнату, я обрезаю весь остальной мир с дерева, а затем только визуализирую комнату и всех ее потомков.
Я думаю, что многие дизайнерские решения, принятые командой JMonkeyEngine, были основаны на том, что написано в книге Дэвида Эберли 3D Game Engine Design .Я не знаю технических деталей о том, как реализовать такой подход, но держу пари, что эта книга станет для вас отличной отправной точкой.
Вот интересная статья о некоторыхразличные алгоритмы отбраковки:
- Просмотреть отбраковку Frustum
- Отбор задней поверхности
- Отбор окклюзии на основе клеток
- Отбор окклюзии произвольной геометрии на основе PVS
- Другие