getBoundingBox () ) )
continue;
renderPoly ( view, camera, poly, tempPoly, viewFrustrum, ob );
}
// now render transparent polygons if ( root != NULL ) // using BspDrawVisitor class

1 лава б. Пишем портальный реноерер (часть 11)

\ {
BspDrawVisitor vis ( Sview, this, &camera,
SviewFrustrum, StempPoly );
root -> visitPostorder ( vis ) ,-
}
view.unlock (); // commit drawing

Консоль Еще одной функциональностью, которую мы собираемся добавить :в этой главе, является консоль, аналогичная встречающейся в игре Quake и во многих других играх.

Для обеспечения гибкости и расширяемости консоли удобно изменяемую функциональность - поддерживаемые команды - инкапсулировать в объекты. Каждый такой объект должен уметь выполнить определенную команду по заданному списку аргументов. Удобно сразу же добавить возможность вывода подсказки по данной команды. Тогда в самой консоли Просто хранится список таких команд-объектов. Интерфейс команды может быть описан при помощи следующего класса: и

plass ConsoleCommand : public Object {
public:
ConsoleCommand ( const char * theName ) : i Object ( theName ) {}
virtual void execute ( const Arrays argv, Console * ; * console ) {}
virtual void printHelp ( Console * console ) const {}
static MetaClass classlnstance;

Метод execute служит для выполнения команды. На вход он получает сассив из строк-аргументов (введенная пользователем строка разбивается пробелами на слова) и указатель на саму консоль.

Метод printHelp служит для вывода помощи по команде.

При таком подходе сама консоль содержит список объектов-команд I для каждой введенной пользователем команды ищется соответствующий )бъект, которому и передается запрос на выполнение команды.

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


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