Текстовый адаптер также имеет аппаратные средства управления курсором. Знакоместо, на которое указывают регистры координат курсора, оформляется особым образом. Обычно его выделяют мигающей полоской, размер и положение которой относительно знакоместа программируется. Подчеркнем, что к такому выделению байт атрибутов не имеет отношения, хотя возможен неудачный выбор атрибутов (сочетание цветов), когда курсор перестает быть различимым. Несмотря на большее количество узлов текстового адаптера по сравнению с чисто графическим, его цена оказывалась гораздо ниже. Дело в том, что для текстового режима с форматом 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) позволяет проходить через него лучам света от источников. Поверхность имеет некоторый цвет, а также характеризуется степенью отражения (она может быть глянцевой или матовой). Для того чтобы получить реалистичное отображение модели, приходится отслеживать прохождение лучей от установленных источников освещения, достигающих глаза воображаемого наблюдателя как при отражении от поверхностей, так и при преломлении при прохождении через прозрачные и просвечиваемые объекты. При этом должны учитываться эффекты перспективы, как оптической (искажение формы), так и атмосферной (имитация дымки или тумана).