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 для каждой введенной пользователем команды ищется соответствующий )бъект, которому и передается запрос на выполнение команды.
Подобный подход позволяет легко добавлять поддержку новых команд в консоль без необходимости каких-либо изменений в исходном коде самой консоли. В частности, возможно добавление команды прямо на этапе выполнения программы.