Реализовать рассмотренные режимы можно, корректируя в соответствии с изменением окна область просмотра или матрицу проецирования.

Чтобы изменение окна не влияло на линейные размеры элементов изображения, можно задать при инициализации область вывода размером во весь экран и в дальнейшем ее не изменять ни в функции RenderO (), ни при обработке сообщений WM_SIZE. Для этого потребуется определять разрешение экрана вызовами функций GetSystemMetrics(SM_CXSCREEN) и GetSystemMetri cs (SM_CYSCREEN).

Если область просмотра функцией gl Vi ewPort () совмещать с рабочей областью окна перед началом вывода примитивов или по каждому сообщению WM_SIZE, то получим режим линзы, в котором изображение будет автоматически масштабироваться при изменении размеров окна, как показано в листинге 22.6.

Листинг 22.6

void OnSizeCHWND hWnd.UINT message.WPARAM wParam.LPARAM lParam) {

g1V i ewpo rt(0.0.LOWORD(wP а г am).HIWORD(wP a ram)); }

Программа, позволяющая изменять режим при помощи выбора пункта меню, находится в папке Линза_Шторка_61_.

Использование расширений Использование расширений Измерение временных характеристик Чтобы оценить затраты времени на очистку буферов, вывод примитивов и смену страниц, в файле Utils.h объявлены класс LogTime, позволяющий разместить в тексте программы контрольные точки для фиксации временных интервалов, и класс LogHead, который содержит заголовок списка контрольных точек типа LogTi me. Код этого класса приведен в листинге 22.7.

Листинг 22.7

class LogTime {

friend class LogHead: //Заголовок списка контрольных точек. _int64 S; //Время начала выполнения фрагмента программы.

_int64 F; //Время окончания выполнения фрагмента программы.

char *R; //Пояснительный текст, public:

LogTime *next; //Адрес следующей контрольной точки. LogTimeCLogHead *L,char *):

void StartCvoid){S - HightTimeC);} //Запись времени начала фрагмента в S. void Periode void):

void Finish(void) {S=HightTime():} //Запись времени конца фрагмента в F. }: Можно включить в программу макрос START(<Mma заголовка списка>. Пояснительная


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