}
Класс Timer
Для правильной анимации и расчета числа кадров в секунду нужен ме-Цанизм отслеживания времени. Поскольку возможно использование разных механизмов отслеживания времени, то удобно для этой цели также использовать объекты. Интерфейс для данных объектов приводится ниже.
class Timer : public Object {
public:
Timer ( const char * theName ) : Object ( theName ) {
metaClass = &classlnstance;
}
virtual float getTime () const = 0;
// elapsed time since timer's creation
virtual void pause () = 0;
// pause timer, can be nested virtual void resume () = 0 ;
// resume timer, can be nested
static MetaClass classlnstance;
};
Timer * getTimer ( const char * theName = "" );
// factory method for getting timers
Метод getTime возвращает время в секундах с момента создания таймера. Методы pause и resume позволяют приостанавливать и продолжать работу таймера.
Описанный класс Timer является интерфейсом, и для создания таймеров служит функция getTimer, возвращающая экземпляр подкласса класса Timer. На компакт-диске применяются два таких подкласса - класс Win-dowsTimer и класс HiPrecTimer. Первый из них использует функцию timeGetTime из библиотеки Windows, второй - применяет функции QueryPerformanceCounter и QueryPerformanceFrequency.
Класс Camera
Еще одним классом, который нам понадобится, является класс Camera -модель камеры (игрока), помещенной в трехмерную сцену. Камера обладает следующими основными атрибутами - положением, ориентацией, углом обзора {field of view, fov), усеченной пирамидой видимости (viewing frustrum). Фактически камера включает в себя прямоугольную систему координат, область видимости и параметры проектирования и окна, в которое осуществляется вывод изображения.
Пишем портальный рендерер (часть I)
г Положение камеры будем задавать при помощи вектора pos, а для задания ее ориентации будем использовать 3 ортонормированных вектора -^viewDir, upDir и rightDir, задающие направление взгляда вперед, направление вверх и направление вправо соответственно.