Смекни!
smekni.com

Реализация трехмерной графики (стр. 3 из 10)


Рисунок 2. Линейное отображение пикселов в видеопамяти: а – 1 бит на пиксел;

б – 2 бита на пиксел


Рисунок 3. Многослойное отображение пикселов в видеопамяти

В режимах 8, 16 и 24 бит на пиксел также используется линейная организа­ция, но каждый байт (слово или три байта) отвечает уже за цвет одного пиксела. Многоплоскостная организация здесь уже была бы неэффективной.

Вышеописанные варианты организации видеопамяти — и линейный, и мно­гоплоскостной — представляют собой отображение матрицы пикселов экрана на биты видеопамяти — Bit Mapping. Растровый формат хранения изображений, при котором биты так или иначе отображают пикселы, называется битовой картой (BitMap). С точки зрения плотности хранения графической информации этот формат не самый эффективный, но в видеопамяти растрового дисплея вслед­ствие высокого темпа вывода информации при регенерации изображения иной формат неприемлем. В векторных дисплеях, о которых мы упоминали, в памяти хранились только векторные описатели фигур, что для контурных изображений обычно оказывается компактнее.

Объем видеопамяти (в битах), требуемый для хранения образа экрана, опре­деляется как произведение количества пикселов в строке на количество строк и на количество бит на пиксел. Так, для режима HGC 720 х 350 с одним битом на точку он составляет 252 000 бит или около 31 Кбайт, а 800 х 600 х 256 цветов — 480 000 бит или около 469 Кбайт. Если физический объем видеопамяти превы­шает необходимый для отображения матрицы всего экрана, видеопамять можно разбить на страницы. Страница — это область видеопамяти, в которой умещает­ся образ целого экрана. При многостраничной организации видеопамяти только одна из них может быть активной — отображаемой на экран. Этим страницы принципиально отличаются от слоев, которые отображаются одновременно.

Формирование битовой карты изображения в видеопамяти графического адап­тера производится под управлением программы, исполняемой центральным про­цессором. Сама по себе задача формирования процессору вполне по силам, но при ее решении требуется пересылка большого объема информации в видеопа­мять, а для многих построений еще и чтение видеопамяти со стороны процессо­ра. Видеопамять большую часть времени занята выдачей информации схемам регенерации изображения в довольно напряженном темпе. От этого процесса она свободна только во время обратного хода луча по строке и кадру, но это мень­шая часть времени. Если обращение к активной странице видеопамяти со сторо­ны процессора происходит во время прямого хода и быстродействия схем адап­тера недостаточно для того, чтобы это обращение вписалось между соседними выборками процесса регенерации, на экране появится штрих от несчитанной ин­формации пикселов. Если такое обращение происходит часто, на экране появля­ется «снег», что неприятно. Дожидаться обратного хода по строке или кадру на­кладно: строчный период коротких (несколько микросекунд) интервалов обрат­ного хода имеет порядок 25 мкс, а кадровый период длинного (миллисекунды) обратного хода имеет порядок 20 мс, в то время как цикл обращения процессора к обычной памяти не превышает сотен (у современных компьютеров — десят­ков) наносекунд. Так что канал связи процессора с видеопамятью представляет собой узкое горлышко, через которое пытаются протолкнуть немалый поток дан­ных, причем чем более высокое разрешение экрана и чем больше цветов (бит на пиксел), тем этот поток должен быть интенсивнее. Конечно, при выводе стати­ческой картинки это вроде и не страшно, но «оживить» изображение оказывается проблематично. Выходов из этого затруднения имеется несколько. Во-пер­вых, повышают быстродействие видеопамяти. Во-вторых, расширяют разрядность шин графического адаптера, причем как внутренней (шины видеопамяти), так и интерфейсной, и применяют высокопроизводительные шины (раньше локаль­ную VLB, теперь PCI или порт AGP). Расширение разрядности позволяет за один цикл обращения передать большее количество бит данных — повысить про­изводительность. Однако если у адаптера, к примеру VGA, разрядность интер­фейсной шины — 16 бит, а установлен минимальный объем памяти, при кото­ром используется только 8 бит, то эффективная разрядность интерфейса окажется всего 8 бит. То же относится и к адаптерам с 32-разрядной шиной. Этим объяс­няется не совсем очевидный факт, что производительность графического адапте­ра зависит от объема установленной видеопамяти. В-третьих, повысить скорость видеопостроений можно кэшированием видеопамяти или затенением видеопа­мяти, что, по сути, почти одно и то же. В этом случае при записи в область видеопамяти данные будут записаны как в видеопамять, так и в ОЗУ (или даже в кэш), а при считывании из этой области обращение будет только к быстродей­ствующему ОЗУ. И в-четвертых, можно принципиально сократить объем инфор­мации, передаваемой графическому адаптеру, но для этого графический адаптер должен быть наделен «интеллектом». В современных компьютерах используют­ся все эти решения.

Под интеллектом графического адаптера подразумевается наличие на его плате собственного процессора, способного формировать растровое изображение в видеопамяти (bitmap) по командам, полученным от центрального процессора. Команды ориентируются на наиболее часто используемые методы описания изоб­ражений, которые строятся из отдельных графических элементов более высоко­го уровня, чем пикселы.

Команды рисования (Drawing Commands) обеспечивают построение графи­ческих примитивов — точки, отрезка прямой, прямоугольника, дуги, эллипса. Примитивы такого типа в командах описываются в векторном виде, что гораздо компактнее, чем их растровый образ. Таким образом, удается значительно сокра­тить объем передаваемой графической информации за счет применения более эффективного способа описания изображений. К командам рисования относит­ся и заливка замкнутого контура, заданного в растровом виде, некоторым цветом или узором (pattern). Она ускоряется особенно эффективно: при программной реализации процессор должен просмотреть содержимое видеопамяти вокруг за­данной точки, двигаясь по всем направлениям до обнаружения границы контура и изменяя цвет пикселов на своем пути. При этом требуется чтение большого объема данных видеопамяти, их анализ и запись модифицированных данных об­ратно в видеопамять. Процессор интеллектуального адаптера способен выпол­нить эту операцию быстро и без выхода с этим потоком данных на внешнюю магистраль.

Копирование блока с одного места экрана на другое применяется для «про­крутки» изображения экрана в разных направлениях. Эта команда сводится к пересылке блока бит — BitBlT (Bit Block Transferring), и эта операция интеллек­туальным адаптером может быть сильно ускорена.

Для формирования курсора на графическом экране применяют команды ра­боты со спрайтами. Спрайт (Sprite) — небольшой прямоугольный фрагмент изображения, который может перемещаться по экрану как единое целое. Перед ис­пользованием его программируют — определяют размер и растровое изображе­ние для него, после этого он может перемещаться по экрану, для чего достаточно только указывать его координаты.

Аппаратная поддержка окон (Hardware Windowing) упрощает и ускоряет ра­боту с экраном в многозадачных (многооконных) системах. На традиционном графическом адаптере при наличии нескольких, возможно, перекрывающих друг друга окон программе приходится отслеживать координаты обрабатываемых то­чек с тем, чтобы не выйти за пределы своего окна. Аппаратная поддержка окон упрощает вывод изображений: каждой задаче выделяется свое окно — область видеопамяти требуемого размера, в котором она работает монопольно. Взаимное расположение окон сообщается интеллектуальному адаптеру, и он для регенера­ции изображения синхронно с движением луча по растру сканирует видеопа­мять не линейно, а перескакивая с области памяти одного окна на другое.

Если объем видеопамяти превышает необходимый для данного формата эк­рана и глубины цветов, то в ней можно строить изображение, превышающее по размеру отображаемую часть. Интеллектуальному адаптеру можно поручить па­норамирование (Panning) — отображение заданной области. При этом горизон­тальная и вертикальная прокрутка изображения не потребует операций блочных пересылок (конечно, в пределах сформированного большого изображения) — для перемещения достаточно лишь изменить указатель положения.

Вышеописанные функции интеллектуального адаптера относятся к двумер­ной графике (2D). Современные графические адаптеры берут на себя и многие функции построения трехмерных изображений, о чем более подробно рассказа­но в главе 4. Трехмерное изображение должно состоять из ряда поверхностей различной формы. Эти поверхности «собираются» из отдельных элементов-по­лигонов, чаще треугольников, каждый из которых имеет трехмерные координа­ты вершин и описание поверхности (цвет, узор). Перемещение объектов (или наблюдателя) приводит к необходимости пересчета всех координат. Для созда­ния реалистичных изображений учитывается перспектива — пространственная и атмосферная (дымка или туман), освещенность поверхностей и отражение света от них, прозрачность и многие другие факторы.