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

/шоттои

Пишем рендерер уровней Quake 11

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

Ясно, что при использовании этой схемы, кроме действительно видимых граней, будет выведено небольшое количество невидимых граней. Но поскольку их число невелико и графический ускоритель, используя метод г-буфера, точно определит точную видимость в сцене, то эти расходы оказываются приемлемыми.

Поскольку число листьев в BSP-дереве может быть довольно большим, в игре Quake 11 множество всех листьев группируется на так называемые кластеры и для каждого такого кластера хранится список всех кластеров, видимых (хотя бы частично) из данного. Подобный подход позволяет сэкономить место на хранении списков видимости.

Все данные для игры (уровни, модели, текстуры, звуки и т. н.) хранятся в одном файле с расширением рак. Это составной файл, содержащий в себе множество отдельных файлов с данными. Для поддержки доступа к данным внутри этого файла находится каталог, содержащий список всех файлов с данными внутри него и ссылки на положение каждого из файлов внутри рак-фаша. Работа с таким составным файлом может быть легко реализована в терминах класса ResourceSource. На компакт-диске приводится класс PakFileSystem, служащий для доступа к отдельным файлам внутри рак-файла.

Описание отдельной сцены (уровня игры) содержится внутри файла с расширением bsp. Это тоже составной файл, состоящий из заголовка и набора блоков (lumps).

ам.

struct Quake2BspEntry // entry in .bsp file directory
{
long
long
size;
offset;

⇐ Предыдущая| |Следующая ⇒