Если пользователь изменит размеры окна, то в очередном цикле рендеринга, вызванном по сообщению WMPAINT, метод Device->Present( ) восстановит отображение всей невидимой страницы на всю рабочую область окна. То есть изображение будет автоматически растягиваться и сжиматься вместе с окном. Библиотека OpenGL копирует попадающую в окно часть области просмотра без масштабирования, и окно без корректировки величины области просмотра работает в ней, как шторка.

Применение библиотеки DirectX

При помощи первого параметра метода Présente ), задающего прямоугольную область-источник на невидимой странице, и второго параметра, определяющего область-приемник в рабочей области окна, можно задавать самые разные способы кадрирования, в том числе и тот, который принят в OpenGL.

Стоит рассмотреть ситуации, в которых может иметь преимущество тот или иной подход. Видеопамять является аппаратным ресурсом, которого всегда не хватает. Аппаратное ускорение графических операций можно использовать только для объектов, размещенных в видеопамяти, а не в системной. Для графических режимов высокого разрешения создание каждого буфера требует нескольких мегабайт. После этого разместить в видеопамяти все необходимые текстуры, как правило, не удается. Поэтому, если в конкретной системе трехмерная сцена должна быть показана на части экрана, управление размером невидимой страницы можно резко повысить быстродействие системы за счет исключения диспетчеризации и подкачки текстур из системной памяти в видеопамять.

Но при несоответствии размеров невидимой и отображаемой.страниц метод Présente ) выполняет масштабирование плоского растрового изображения, что ведет к потере качества, когда, например, три точки разного цвета надо заменить двумя.

На рис. 23.2 показан пример искажений, возникающих при увеличении окна. При инициализации библиотеки были заданы небольшое окно и равная ему невидимая страница, а во время работы приложения окно было увеличено в несколько раз. На рисунке можно увидеть треугольник, имеющий ступенчатые края и дискретное изменение цвета. Пользователя часто не устраивают даже аппаратные размеры пиксела, а масштабирование их еще больше огрубляет. Разработчики библиотек даже жертвуют ресурсами времени и памяти, предусматривая дополнительную обработку и применяя антиалиазинг для сглаживания лестничного эффекта и многократное рисование с дрожанием точки наблюдения и накоплением суммы кодов цвета в буфере накопления (multisampling, по терминологии DirectX).


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