В истории вычислительной техники развитие программных и аппаратных средств тесно переплетено друг с другом. Новые технические возможности поззволяют программистам сделать очередной шаг вперед и при этом у них просто появляются новые требования к аппаратуре. Основное влияние на расширение функций видеокарт оказало стремление получить на экране монитора объемное движущееся изображение, построенное с учетом перспективы и распределения света и тени. Пионерами этого направления были разработчики компьютерных игр.
Как известно, на холсте или листе бумаги можно нарисовать только плоское изображение, а для придания ему эффекта объемности применяются специальные приемы рисования. То, что мы видим в ре-зультате, является оптической иллюзией (обманом зрения), основанной на нашем жизненном опыте восприятия окружающего мира.
Для получения изображения куба его грани надо расположить под определенными
углами. У шара граней нет, поэтому для придания кругу эффекта объемности
используется распределение света и тени, создаваемое с помощью штриховки
Перечисленные приемы основаны не только на нашем субъективном восприятии окружающего мира, но и на вполне объективных законах оптики, Существует возможность формального описания способов преобразования трехмерных объектов в двухмерные и программной реализации алгоритмов вычислений. Такие алгоритмы не учитывают субъективный фактор, но это второстепенный вопрос.
В отличие от листа бумаги экран монитора является плоской дискретной поверхностью, поэтому компьютерная графика имеет дело с дискретными объектами. Для их аналитического описания нужны специальные методы аппроксимации. При описании плоских (двухмерных) объектов обычно Применяются методы линейной и векторной графики, а при описании трехмерных объектов — полигональной графики (слово polygon переводится как многоугольник). Чаще всего в качестве многоугольников используются треугольники.
В разработку методов трехмерной графики основной вклад внесла Reality b 3D, подразделение ныне не существующей компании Rendermorphis.
Результаты ее работы легли в основу графической библиотеки Direct3D, продукт фирмы Microsoft. Они же были использованы при создании языка VRML, предназначенного для описания трехмерных сценариев. Его создала Cosmo Software, а адаптировала российская фирма ParaGraph.
Процесс построения трехмерного изображения можно разделить на два этапа:
Геометрические вычисления сводятся к манипуляциям с векторами и матрицами, в результате которых получается совокупность треугольников, аппроксимирующая поверхность трехмерного объекта. Эти вычисления полностью зависят от конкретных свойств графических объектов, поэтому их выполняет центральный процессор ПК.
Процесс визуализации (rendering) заключается в том, что полученные треугольники отображаются на дискретную плоскость (поверхность экрана). При этом некоторые из них могут превратиться в линии или точки, а часть окажется на невидимой стороне объекта. Треугольники раскрашиваются по заданным образцам (их называют текстурами), а для получения эффекта объемности учитывается распределение уровней освещенности. Кроме того, могут понадобиться вычисления, связанные с изменением размеров всего изображения или отдельных его частей, коррекцией перспективы, созданием эффекта тумана и др.
Все эти действия не столь сложны, как геометрические построения, но их количество огромно, оно во много раз больше, чем количество точек на экране монитора или в рисунке, если он занимает не весь экран. Выполнение визуализации процессором ПК существенно замедляет работу с графикой.
Одним из распространенных приемов ускорения является перенос несложных, но многократно повторяемых вычислений на аппаратный уровень. Для этого создаются специальные процессоры, выполняющие нужные вычисления по микропрограммам, работающим намного быстрее программ аналогичного назначения.
Модели акселераторов
Акселератор (accelerator, ускоритель) является специализированным вычислительным устройством, предназначенным для ускорения процесса построения или преобразования графических изображений. В отличие от обычных видеокарт акселератор получает от процессора не завершенный образ изображения, а более общую и сжатую информацию, на основании которой он, а не процессор, вычисляет точечный образ рисунка и записывает его в видеопамять.
Первые модели акселераторов выпускались в виде отдельных плат, которые
обрабатывали данные, поступающие от процессора, и передавали их обычной
видеокарте. Но очень скоро вычислительный микропроцессор начали
располагать на плате видеокарты, а затем его и видеоконтроллер объединили
в одну большую микросхему (чип). Акселераторы могут предназначаться для
ускорения работы с двухмерными или трехмерными графическими объектами.
В названии первых присутствует обозначение 2D, а в названии вторых — 3D,
где D является первой буквой слова direction — направление.
Акселераторы могут быть рассчитаны на установку в гнездо шины PCI или в специализированный разъем AGP, который появился на материнских платах ПК после выпуска микропроцессора Pentium II. Разъем AGP имеет 128-разрядную шину данных, что существенно ускоряет процесс обмена между центральным процессором и видеокартой.
При вычислениях используется видеопамять, расположенная на плате акселератора, поэтому ее объем всегда больше того, который нужен для работы видеокарты в обычном режиме. В настоящее время в продаже имеются акселераторы AGP с объемом видеопамяти 32 и 64 Мбайт.
Современные модели акселераторов чаще всего собираются на базе специализированного графического процессора, выполненного в виде большой интегральной микросхемы (чипа), которые выпускают более десятка различных фирм. Корпорация Intel выпустила свой чип i740, но пока он не получил широкого распространения. По данным агентства Mercury Research на сентябрь 1998 года, в первую пятерку производителей графических чипов входят: ATI, S3, Cirrus Logis, Silicon Integrated System (SIS) и Trident Microsystems. Кроме основных чипов эти фирмы выпускают комплекты сопутствующих микросхем и полностью завершенную продукцию, т. е. видеокарты и акселераторы. Возглавляющая список ATI Technologies производит 27% всех графических чипов. Поэтому вероятность приобрести акселератор, собранный из ее комплектующих, весьма велика.
Акселераторы существенно различаются по цене, но возможности дешевых моделей ограничены. Обычно у них разрешающая способность не превышает 800x600 точек, а из полноцветных видеорежимов поддерживается только Hi-coior. Однако при использовании акселератора в качестве обычной видеокарты эти ограничения отсутствуют.
Функции акселераторов
Набор выполняемых функций зависит от конкретного назначения акселератора. По личному опыту вы знаете, что при рисовании и черчении приходится иметь дело с различными объектами и с разными способами их изображения. Соответственно, функции акселераторов, предназначенных для ускорения геометрических построений и для работы с художественными изображениями, различаются весьма существенно. Некую комбинацию из этих функций могут поддерживать акселераторы, предназначенные для систем автоматизации проектирования. Специфический набор функций поддерживают акселераторы, используемые для игровых приложений. В этих случаях основными требованиями являются быстрота смены картинки и возможность создания различных спецэффектов, а точность построения самого изображения не столь существенна.
На сегодняшний день невозможно выделить некий стандартный набор функций, выполняемых акселераторами. У разработчиков отсутствует достаточный практический опыт, поэтому они просто воплощают функции, поддерживаемые графическими библиотеками Direct3D и OpenGL. К ним относятся раскрашивание треугольников по заданным образцам (наложение текстур), альфа смешение (см. раздел 7.6), создание эффекта тумана (см. раздел 7.6), вычисление распределения света и тени по методу Гуро (Gouraud Shading), коррекция перспективы и некоторые другие.
Кроме того, у акселераторов появилась функция иного назначения. Это преобразование телевизионного изображения в компьютерное и обратно. В таких случаях на видеокарте имеется разъем для подключения телевизора или видеомагнитофона. В качестве примера можно привести изделия фирм ATI и S3. Подчеркнем, что речь идет не о приеме телевизионных сигналов — для этого существуют специальные платы, а об аппаратном преобразовании сигналов из телевизионного стандарта (NTSC, PAL и т) в последовательность кодов точек, записываемых в видеопамять. Такое преобразование является двухсторонним, т. е. коды хранящихся в видеопамяти точек могут преобразовываться в один из телевизионных стандартов. Такие функции расширяют возможности компьютерной обработки телевизионных изображений и делают ее более доступной для пользователей.
Программирование акселераторов
После включения ПК и загрузки операционной системы, неважно какой, акселератор работает как обычная видеокарта. Такой режим необходим для нормальной работы операционных систем и многих прикладных задач. Примером могут служить Windows и ее многочисленные приложения. Программирование акселератора как обычной видеокарты ничем не отличается от того, что описано в данной книге.
Основные (вычислительные) функции акселераторов выполняются в 32-разрядном (защищенном) режиме работы ПК. Речь идет о разрядности адресов, данные могут содержать меньшее или большее количество разрядов. Выполнение прикладных задач в защищенном режиме поддерживают, например, Windows 9X/2000/NT и OS/2. DOS является операционной системой реального (16-разрядного) режима, но существуют так называемые расширители (DOS extenders), которые подключаются к прикладной задаче и создают на время ее выполнения вычислительную среду, необходимую для работы в защищенном режиме. Наиболее известными из них являются DOS4GW, DOS32A, PMODE/W.
При выборе операционной системы приходится учитывать тот факт, что в настоящее время не существует стандарта на программирование функций акселераторов, хотя ассоциация VESA предпринимает активные усилия по его разработке. Первый документ VBE/AF Standard 1.0 был выпущен в августе 1996 года. В настоящее время опубликована третья редакция этого документа, но в ее первых строках подчеркивается, что она содержит черновые предложения и не более того.
Отсутствие стандартов означает, что непосредственно взаимодействующая с акселератором задача не будет переносимой. Она будет выполняться только на тех ПК, на которых установлена соответствующая модель акселератора. Существует довольно много компьютерных игр, созданных для определенных моделей акселераторов, в остальных случаях они либо вообще не работают, либо работают медленно, если вычисления выполняет процессор.
Проблема переносимости частично решается с помощью драйверов, которые продаются вместе с акселератором. Они составлены для определенной операционной системы и рассчитаны на взаимодействие с одной из распространенных графических библиотек.
Среда Windows позволяет создавать любые графические приложения. Разработчикам доступны графические библиотеки Direct3D и OpenGL, которые хорошо документированы и общедоступны. Если установлен соответствующий драйвер, то они используют возможности акселератора, в противном случае требуемые действия выполняются программно, что замедляет процесс выполнения задач, но решает проблему их переносимости.
Пакет Direct3D разработан Microsoft и является одной из частей библиотеки DirectX, входящей в состав Windows 9X, начиная с версии 98, Windows NT и 2000. Он предназначен для ускорения выполнения игровых задач в среде Windows. Первая версия пакета была выпущена в 1996 году.
Библиотека OpenGL была создана в 1993 году фирмой Silicon Graphics для компьютеров совершенно другого класса и для иной операционной системы. В 1995 году совместно с Microsoft она адаптировала ее для IBM PC. С этой библиотекой работает, например, последняя версия компилятора Фортрана для Windows.
В отличие от Direct3D, OpenGL более гибкая и многофункциональная библиотека. Изначально она создавалась для применения трехмерной графики в системах автоматизированного проектирования. Однако она не содержит средств, позволяющих работать непосредственно с видеопамятью в обход интерфейса графических устройств (GDI), который существенно замедляет выполнение прикладных задач. Для этого нужна дополнительная библиотека WinG или DirectDraw, которая является частью библиотеки DirectX.
Еще совсем недавно мысль о том, что можно создать хорошее трехмерное графическое приложение под Windows казалась совершенно нелепой любому программисту, имеющему дело с этой системой. С появлением библиотеки DirectX ситуация изменилась в лучшую сторону. Но, тем не менее, среда Windows остается весьма инерционной, и разработчики компьютерных игр продолжают и, вероятно, еще долго будут продолжать использовать для ускорения процесса игры расширитель DOS4GW и ему подобные.