3.9. Понятие видеостраниц и работа с ними Для большинства режимов (например, для EGAHI) объем видеопамяти, необходимый для хранения всего изображения (экрана), составляет менее половины имеющейся видеопамяти (256 Кбайт для EGA и VGA). В этом случае вся видеопамять делится на равные части (их количество обычно является степенью двойки), называемые страницами, так, что для хранения всего изображения достаточно одной страницы. Для режима EGAHT видеопамять делится на две страницы - 0-ю (адрес 0хА000:0) и 1-ю (адрес ОхАООО: 0x8000).
Видеоадаптер отображает на экран только одну из имеющихся у него страниц. Эта страница называется видимой и устанавливается следующей процедурой:
void far setvisualpage (int page );
Компьютерная графика. Полигональные модели а
J0L
где page - номер той страницы, которая станет видимой на экране после вызова этой процедуры.
Графическая библиотека может осуществлять работу с любой из имеющихся страниц. Страница, с которой работает библиотека, называется активной. Активная страница устанавливается процедурой setactivepage:
void far setactivepage (int page );
где page - номер страницы, с которой работает библиотека и на которую происходит весь вывод.
Использование видеостраниц играет очень большую роль при мультипликации.
Реализация мультипликации на ПЭВМ заключается в последовательном рисовании на экране очередного кадра. При традиционном способе работы (кадр рисуется, экран очищается, рисуется следующий кадр) постоянные очистки экрана и построение нового изображения на чистом экране создают нежелательный эффект мерцания.
Для устранения этого эффекта очень удобно использовать страницы видеопамяти: пока на видимой странице пользователь видит один кадр, активная, но невидимая страница очищается и на ней рисуется новый кадр. Как только кадр готов, активная и видимая страницы меняются местами и пользователь вместо старого кадра сразу видит новый.
// File example4.cpp #include <conio.h> #include <graphics.h> #include <process.h> #include <stdio.h>