Смекни!
smekni.com

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

Текстовый адаптер также имеет аппаратные средства управления курсором. Знакоместо, на которое указывают регистры координат курсора, оформляется особым образом. Обычно его выделяют мигающей полоской, размер и положение которой относительно знакоместа программируется. Подчеркнем, что к та­кому выделению байт атрибутов не имеет отношения, хотя возможен неудачный выбор атрибутов (сочетание цветов), когда курсор перестает быть различимым. Несмотря на большее количество узлов текстового адаптера по сравнению с чисто графическим, его цена оказывалась гораздо ниже. Дело в том, что для тек­стового режима с форматом 25 строк по 80 символов (максимального для суще­ствующих чисто текстовых адаптеров) требуется всего 2 Кбайт видеопамяти для символов и 2 Кбайт для их атрибутов. При этом символы могут иметь хорошо читаемую матрицу разложения 9 х 14 и по 8 бит для атрибутов, определяющих цветовое оформление знакоместа. Частота считывания видеопамяти для регене­рации изображения невысока: за время прямого хода по строке должно быть считано всего 80 слов. Графический режим (720 х 350) для отображения такой же матрицы символов потребует уже около 32 Кбайт видеопамяти в монохром­ном варианте, а в 16-цветном уже 128 Кбайт. Конечно, в настоящее время эко­номия видеопамяти в таких объемах уже не играет роли в цене адаптера, но не следует забывать и о том, что при выводе изображения эту память нужно запол­нять. Поскольку в текстовом режиме в адаптер передаются только коды симво­лов, заполнение всего экрана займет в десятки раз меньше времени, чем постро­ение того же изображения в графическом режиме. Программный код вывода сим­волов в текстовом режиме проще и компактнее, чем при программном формиро­вании его растрового изображения. По этим причинам все графические адапте­ры имеют знакогенератор, дающий возможность работы и в текстовом режиме, а при переходе в графический режим знакогенератор отключается. Интеллекту­альные адаптеры позволяют выводить символы (формировать их растровое изоб­ражение с заданным форматом знакоместа) и в графическом режиме. При этом адаптер получает только команду с указанием координат отображаемых симво­лов и сам поток кодов символов, после чего быстро строит их изображение, не отвлекая центральный процессор.

4. Трехмерная графика

Потребности работы с трехмерными изображениями, или 3D-графикой (SDimen-sions — 3 измерения), имеются в широком спектре приложений — от игр, кото­рыми увлекается масса пользователей, до систем автоматического проектирования, используемых в архитектуре, машиностроении и других областях. Конечно же, компьютер оперирует не самими трехмерными объектами, а их математичес­кими описаниями. Трехмерное приложение оперирует объектами, описанными в некоторой глобальной системе координат (Global или World Coordinate System). Чаще всего здесь используется ортогональная, она же декартова (Cartesian), си­стема координат, в которой положение каждой точки задается ее расстоянием от начала координат по трем взаимно перпендикулярным осям X, Y и Z. В некото­рых случаях используется и сферическая система координат, в которой положе­ние точки задается удалением от центра и двумя углами направления. В этом «мире» находятся все объекты, которые создает и учитывает приложение, и они имеют определенное взаимное расположение. Пользователю эти объекты могут быть продемонстрированы лишь с помощью графических устройств вывода, из которых наибольший интерес пока представляет собой дисплей. Однако он, как и большинство устройств визуализации, имеет лишь плоский (двумерный) эк­ран, с помощью которого необходимо создать иллюзию трехмерного изображе­ния. Здесь упомянем и о существовании стереоскопических систем отображе­ния, дающих больший эффект присутствия наблюдателя в среде изображаемых объектов. Однако и в них тем или иным способом для каждого глаза формирует­ся свое двумерное изображение, так что эту иллюзию приходится создавать дваж­ды с двух точек зрения, несколько смещенных относительно друг друга. Дей­ствительно трехмерные устройства вывода уже существуют, но пока что они спо­собны «выводить» лишь статические объекты. Здесь имеется в виду устройство Model Maker (фирма SPI), которое с высокой точностью «выращивает» из плас­тмассы объекты сложной формы, описание которых поступает из трехмерного приложения САПР.

Пока что сосредоточимся на выводе трехмерного изображения на экран гра­фического дисплея. Как известно, в конечном счете на монитор выводится рас­тровое изображение, сформированное в видеопамяти. На экране мы видим мат­рицу пикселов размерностью 800 х 600, 1024 х 768, 1280 х 1024 и больше. Каж­дому пикселу соответствует ячейка видеопамяти, разрядность которой опреде­ляет возможности цветопередачи. Наибольший интерес для трехмерной графи­ки представляют режимы, в которых цветом каждого пиксела непосредственно управляют 15—16 бит (High Color) или 24 бита (True Color) ячейки видеопамя­ти. Режимы с индексным определением цвета (8 бит ячейки видеопамяти выби­рают цвет в соответствии с программированием палитр) для реалистичного изоб­ражения трехмерных объектов малопригодны.

4.1. Графический конвейер

Графический конвейер (Graphic Pipeline) — это некоторое программно-аппарат­ное средство, которое преобразует описание объектов в «мире» приложения в матрицу ячеек видеопамяти растрового дисплея. Его задача — создать иллюзию, о которой говорили выше.

В глобальных координатах приложение создает объекты, состоящие из трех­мерных примитивов. В этом же пространстве располагаются источники освеще­ния, а также определяется точка зрения и направление взгляда наблюдателя. Естественно, что наблюдателю видна только часть объектов: любое тело имеет как видимую (обращенную к наблюдателю), так и невидимую (обратную) сторо­ну. Кроме того, тела могут перекрывать друг друга, полностью или частично. Взаимное расположение объектов относительно друг друга и их видимость за­фиксированным наблюдателем обрабатывается на первой стадии графического конвейера, называемой трансформацией (Transformation). На этой стадии вы­полняются вращения, перемещения и масштабирование объектов, а затем и пре­образование из глобального пространства в пространство наблюдения (world-to-viewspace transform), а из него и преобразование в «окно» наблюдения (viewspace-to-window transform), включая и проецирование с учетом перспективы. Попутно с преобразованием из глобального пространства в пространство наблюдения (до него или после) выполняется удаление невидимых поверхностей, что значительно сокращает объем информации, участвующей в дальнейшей обработке. На сле­дующей стадии конвейера (Lighting) определяется освещенность (и цвет) каждои точки проекции объектов, обусловленной установленными источниками ос­вещения и свойствами поверхностей объектов. И, наконец, на стадии растериза­ции (Rasterization) формируется растровый образ в видеопамяти. На этой ста­дии на изображения поверхностей наносятся текстуры и выполняется интерпо­ляция интенсивности цвета точек, улучшающая восприятие сформированного изображения. Весь процесс создания растрового изображения трехмерных объек­тов называется рендерингом (rendering).

Теперь вспомним о том, что трехмерное изображение хотелось бы «оживить» движением, для чего изображения объектов в новом положении должны схо­дить с графического конвейера со скоростью хотя бы 15 кадров в секунду (со­временные акселераторы могут строить и 100 кадров в секунду). Насколько слож­на эта задача для обычного процессора семейства х86, можно прикинуть по та­кому занятному примеру: каза­лось бы безобидный хранитель экрана из комплекта Windows NT 4.0, который «размахивает» трехмерным изображением флага известной компании, при чисто программной реализации полностью загружал один из двух процессоров Pentium Рго-166 сервера под управлением ОС Windows NT-Server. Это легко увидеть с помощью монитора производительности (Performance Monitor), если на компь­ютер-сервер установить «простую» графическую карту (а зачем, казалось бы, сер­веру мощная графическая карта?). А если взять более сложный хранитель экра­на («ходилка» по трехмерному лабиринту), то четырехпроцессорный (Р6-200) сервер Proliant 500 не способен создать иллюзию хождения по лабиринту — кир­пичи на стенах вырисовываются слишком медленно. В то же время сравнитель­но маломощный компьютер Pentium-166, у которого имеется графическая карта с SD-акселератором, позволяет «бегать» по этому лабиринту довольно быстро. Это колоссальное ускорение построений обеспечивается применением в графи­ческих картах встроенного специализированного процессора, решающего значи­тельную часть задач графического конвейера. О том, что происходит при трех­мерных графических построениях, и пойдет речь дальше.

Графическое приложение создает модель, в которой объекты задаются как со­вокупность тел и поверхностей. Тела могут иметь разнообразную форму, описан­ную каким-либо математическим способом. Проще всего иметь дело с много­гранниками, у которых каждая грань представляет собой часть плоскости, огра­ниченной многоугольником (полигоном). Описание такого тела относительно несложно — оно состоит из упорядоченного списка вершин. Сложнее дело об­стоит с объектами, имеющими не плоские (криволинейные) поверхности. В этом случае в модели поверхности описываются сложными нелинейными уравнения­ми, однако для дальнейших построений их использование из-за громадных объе­мов вычислений проблематично. Для упрощения задачи криволинейные поверх­ности аппроксимируются многоугольниками, и, конечно же, чем мельче много­угольники, тем ближе аппроксимация к модели, но и тем более громоздким ста­новится описание объекта, а следовательно, и больше времени требуется на его обработку. Представление криволинейной поверхности совокупностью плоских граней-многоугольников называется тесселяцией (Tesselation). Слово «tessera», от которого произошел этот термин, означает кубики из смальты, из которых художники собирают мозаику. Как и смальтовые кубики, многоугольники-грани должны быть простыми (не пересекающими себя на манер цифры 8), плоскими и выпуклыми — эти ограничения заметно упрощают их дальнейшую обработку. Кроме формы объектов (описания их поверхностей), важное значение имеют их оптические свойства. Проще всего дело обстоит с непрозрачными объекта­ми — все другие объекты, перекрытые ими для взгляда наблюдателя, просто не­видимы. Эти объекты будут перекрывать и лучи от источников освещения, уста­новленных в модели, на пути которых они встречаются. Сложнее дело обстоит с прозрачными и просвечиваемыми объектами. Прозрачность (transparency) объек­та позволяет видеть и объекты, расположенные за ним, а просвечиваемость (trans-lucency) позволяет проходить через него лучам света от источников. Поверх­ность имеет некоторый цвет, а также характеризуется степенью отражения (она может быть глянцевой или матовой). Для того чтобы получить реалистичное отображение модели, приходится отслеживать прохождение лучей от установ­ленных источников освещения, достигающих глаза воображаемого наблюдателя как при отражении от поверхностей, так и при преломлении при прохождении через прозрачные и просвечиваемые объекты. При этом должны учитываться эффекты перспективы, как оптической (искажение формы), так и атмосферной (имитация дымки или тумана).