
ВОПРОСЫ_И_Лекции по КГ
.pdf
Примерная схема видеоадаптера
От RAMDAC к ЭЛТ идут семь проводов: R- , G- , B-провода для трех пушек, по одному проводу для яркости, синхронизации строчного сигнала, синхронизации кадров, заземления.
Создание компьютерного изображения
Независимо от источника получения компьютерного изображения его свойства характеризуются набором основных параметров, включающих размер изображения, разрешение, формат, тип цветовой модели и палитру (цветовое разрешение). Процедура создания цифрового изображения обычно включает три этапа:
-ввод или получение изображения
-обработку изображения
41

- вывод изображения На этапе ввода или получения изображения цифровой аппарат или сканер
преобразуют (оцифровывают) световую информацию в численные значения, которые сохраняются в файле изображения. В фазе обработки изображения с помощью специального программного обеспечения (графического редактора) происходит обработка числовой информацией об изображении, сохраненной на предыдущем этапе в виде файла. Основной задачей данного этапа является выполнение последовательности шагов для улучшения введенного в компьютер оригинального изображения путем управления и настройки яркости, контраста, цветности, резкости, кадрирования и других. При выводе изображения реализуется обратная процедура, связанная с преобразованием чисел, хранящихся в файле изображения, в готовое изображение аналогичное тому, которое было введено в компьютер на первом этапе. Каждый из перечисленных этапов работы с изображением характеризуется своим типом разрешения. Понятие разрешения включает в себя пространственное разрешение и яркостное разрешение.
Пространственное разрешение (или просто разрешение) характеризует количество мельчайших элементов информации, из которых состоит изображение.
Яркостное разрешение характеризует количество уровней яркости, которые может принимать отдельный пиксель. Чем выше яркостное разрешение, тем большее число уровней яркости будет содержать файл изображения. Таким образом,
разрешение – это совокупность размера изображения в пикселях и глубины цвета.
В самых общих чертах работа с дисплеем ПК в графическом режиме может быть представлена следующим образом. Экран дисплейного монитора представляется, как набор отдельных точек – пикселей, образующий прямоугольный растр. Число пикселей определяет разрешающую способность графической системы и обычно отражается парой чисел, первое из которых показывает количество пикселей в строке, а второе - число строк. Каждому пикселю экрана ставится в соответствие фиксированное количество битов (атрибут пикселя) в некоторой области адресного пространства центрального микропроцессора ПК. Атрибут пиксела (т.е. существенная характеристика пиксела) – это определенное число битов в адресном пространстве ПК. Эта адресное пространство называется видеопамятью, как правило, оно является частью дисплейного адаптера (видеоадаптера) - специального устройства, управляющего работой монитора. Видеоадаптер, в частности, осуществляет циклическое воспроизведение содержимого видеопамяти на экране монитора. Причем изображение каждого пикселя определяется текущим значение его атрибута. Такой подход получил название битовой карты - bit-mapped graphics. Программе, выполняющейся на ПК в графическом режиме, доступны для чтения/записи все пиксели видеопамяти.
Совокупность экранного и цветового разрешения графического режима определяет количество видеопамяти, необходимое для его реализации. В ряде случаев возможно одновременное существование в видеопамяти двух или более областей одинаковой структуры, каждая из которых содержит атрибуты всех пикселей экрана. Такие области называются страницами. В данный момент времени любая из страниц может отображаться видеоадаптером на дисплее, занимая при этом весь экран. Наличие страниц позволяет программе мгновенно менять изображение на экране,
42
просто переключаясь с одной страницы на другую. В частности, это дает возможность проводить всю ―черновую работу‖ по подготовке графического изображения на неотображаемой в настоящий момент времени странице, избегая появления на экране побочных графических эффектов.
Графическое отображение, возникающее на экране монитора, является результатом выполнения следующих действий:
атрибуты пикселей изображения должны быть загружены в память, обычно эту работу осуществляют специальные функции DOS или BIOS, однако возможна и прямая работа с видеопамятью.
специальная схема видеоадаптера обеспечивает периодическое считывание видеопамяти и преобразование значений атрибутов пикселей в последовательность сигналов, управляющих монитором.
В персональных компьютерах используются различные типы дисплейных адаптеров (CGA, EGA, VGA и SVGA.), большинство из которых может работать в различных режимах (текстовых и графических), называемых также видеорежимами (video modes). Графические режимы одного адаптера различаются разрешающей способностью, количеством цветов, количеством страниц видеопамяти и способом их адресации.
Поскольку объем страницы видеопамяти ограничен, то количество бит, приходящиеся на один пиксель, находится в обратной зависимости от общего количества пикселей на экране. Обычно атрибут пикселя состоит из 1, 2, 4 или 8 бит, в зависимости от графического режима. Все пиксели, имеющие одинаковое значение атрибута, отображаются на экране одинаковым образом.
Если атрибуту каждого пикселя в видеопамяти отводится только один бит, то графика будет двухцветной, например черно-белой (конкретные цвета зависят от типа монитора). Если каждый пиксель в графическом режиме представляется n битами, то в
таком режиме имеется возможность одновременно представить на экране
N_pallette=2n оттенков цвета (палитра режима). В некоторых графических системах принято в этом случае говорить о наличии n плоскостей цветов (color planes).
Графический конвейер
Графическая обработка основывается на понятии конвейера, при которой графические данные проходят последовательно несколько этапов обработки - выходные данные одного этапа сразу передаются на вход следующего. Рассмотрим универсальный графический конвейер и выделим в нем 5 этапов (G, T, X, R, D).
Графическая обработка реализуется аппаратно (видеокарта) и программно, но в любом случае она состоит из пяти этапов.
Графические данные проходят
1)Этап генерации (G) - создание и модификация прикладных структур данных.
2)Этап обхода (T) прикладных структур данных и получение соответствующих графических данных.
3)Этап преобразования (X) - на нем графические данные из системы координат объекта преобразуются в систему координат наблюдателя, выполняется расчет освещенности, отсечение преобразованных данных, а затем проецирование результата в пространство окна. (геометрические и проективные преобразования)
43

4)На этапе растеризации (R) создаются и записываются в буфер кадра дискретные образы примитивов: точки, отрезки и полигоны. Буфер кадра - это банк памяти, предназначенный для хранения массива пикселей изображения. На этом этапе для всех вершин геометрических объектов вычисляется закраска, производится наложение определенных участков текстуры, а также выполняются пиксельные операции, такие, например, как сравнение по глубине.
5)На этапе вывода (D) происходит сканирование буфера кадра и вывод изображения на экран дисплея.
Аппаратная реализация конвейера:
ВGPU обычно имеется нескольких блоков обработки информации, а именно: блок обработки 2D графики, блок обработки 3D графики, в свою очередь, обычно разделяющийся на геометрическое ядро (плюс кэш вершин) и блок растеризации (плюс кэш текстур) и др.
Вупрощенной модели графического конвейера особое значение имеет обработка геометрии и обработка фрагментов.
Рисунок 1. Обработка геометрии.
На этапе геометрической обработки графического конвейера выполняется преобразование координат (применение мировой, видовой и проекционной матриц) вершины, перевод вершины в пространство отсечения, расчет освещения, применение материалов, определение цвета каждой вершины с учетом всех источников света и генерация текстурных координат.
44

После выполнения этих операций наступает компоновка примитива. В этой части конвейера, вершины группируются в треугольники и подаются в растеризатор.
Растеризация (растрирование) – это процесс преобразования изображений векторной графики в растровое изображение. Текстура – это дву или трехмерное изображение, которое накладывается на части объекта.
Рисунок 2. Обработка фрагментов.
Растеризатор делит треугольник на фрагменты (пиксели), для которых рассчитываются текстурные координаты и цвет. Затем для каждого фрагмента происходит выполнение следующих операций: проверка принадлежности пикселя, наложение текстур (заданные для фрагмента координаты текстуры определяют цвет из элементов текстурного изображения — текселей, значение этого цвета комбинируется с цветом фрагмента), применение эффектов тумана, альфа-тест, тест шаблона (stenciltest), тест глубины, смешивание, дизеринг и логические операции. После обработки всех этих методов полученный фрагмент помещается в буфер кадра, который впоследствии выводиться на экран. В каждую из этих частей графического конвейера можно вставить свой определенный шейдер. Нынешнее графическое железо, такое, например, как GeForce FX5900 или Radeon9800 предоставляет пользователю возможность замены некоторых частей графического конвейера шейдером. Шейдер
45

— это специальная программа, которая использует определенные программируемые регистры видеокарты для создания различных графических эффектов. Ше́йдер— это программа, используемая в трѐхмерной графике для определения окончательных параметров объекта или изображения. Это может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.
Более новые карты (GeForce 6800) обеспечивают расширенные возможности программируемости шейдеров: огромное количество инструкций, динамическое ветвление и т.д.
Существует два различных шейдера: вершинный шейдер (vertex shader) и пиксельный шейдер (pixel shader).
Вершинный шейдер выполняется для каждой вершины (в данном контексте — это структура, состоящая из нескольких вершинных атрибутов, одним из которых должна быть позиция вершины), проходящей по графическому конвейеру, и его нужно установить в разделе обработки вершин. В нем можно изменять атрибуты, такие как нормаль, позиция, текстурные координаты, цвет вершины и т.д. Эти данные вершинный шейдер получает из вершинного буфера. Во время использования вершинного шейдера следующие части графического конвейера не выполняются: трансформация из мирового пространства в пространство отсечения, нормализация, освещение и материалы, генерация текстурных координат.
Пиксельные шейдеры в свою очередь предоставляют широкие возможности по обработке фрагментов. Они позволяют пользователю по шагам управлять процессом наложения текстур, определения глубины и вычисления цвета фрагментов. Что это дает? Во-первых, можно создавать в играх per-pixel lighting т.е. реальное освещение Во-вторых, позволяет создавать красивые эффекты с частицами (например, огонь, дым, капли дождя). И многое другое.
Пиксельные шейдеры выполняются для каждого фрагмента в фазе растеризации треугольников. Фрагмент (или пиксель) — точка, с оконными координатами, полученная растеризатором после выполнения над ней ряда операций. Проще говоря, результирующая точка буфере кадра, совокупность этих точек потом формирует изображение. Пиксельные шейдеры работают над фрагментами до заключительных стадий, т.е. до тестов глубины, альфы и stencil.
Программируемые шейдеры гибки и эффективны. Сложные с виду поверхности могут быть визуализированы при помощи простых геометрических форм. Например, шейдеры могут быть использованы для рисования поверхности из трѐхмерной керамической плитки на абсолютно плоской поверхности.
Программные интерфейсы (API)
Для ускорения разработки 3D-приложений используются специализированные прикладные программные (графические) библиотеки. Эти библиотеки могут быть как стандартными (разработанными лидерами 3D-индустрии), так и фирменными (разработанными производителями 3D-ускорителей). Функции библиотеки доступны через соответствующий API (Application programming interface) - программный интерфейс разработчика. Можно приближенно сказать, что API - язык описания трехмерной графики. Соответственно, каждое 3D-приложение написано с использованием некоторого API и соответственно будет работать в вашей системе
46
только в том случае, если Ваш видеочип поддерживает соответствующий API. От самого API во многом зависит качество и производительность работы видеоадаптера. В настоящее время чипы поддерживают два стандартных API:
1 OpenGL корпорации Silicon Graphic (SGI). Доступен в ОС Windows NT. В Windows 9x реализован не полностью. Поэтому SGI разработала для Windows 9x драйвер (иногда называемый порт) ICD (Installable Client Driver), позволяющий использовать OpenGL. Этот порт поддерживают все современные 3D-чипы. В свою очередь, Microsoft создала библиотеку MCD (Mini Client Driver), позволяющую задействовать основные возможности OpenGL в Windows 9x.
2 Direct3D корпорации Microsoft для ОС Windows 9x, сокращенно D3D. Он является частью Microsoft DirectX, который стандартно встроен в эту ОС. Новые версии
DirectX доступны с сайта Microsoft.
Указанные интерфейсы скорее дополняют друг друга, чем конкурируют. OpenGL является более высокоуровневым, и в нем есть функции, относящиеся к фазе построения сцены. DirectЗD занимается только визуализацией, но в нем реализована быстрая прорисовка текстур. Следует отметить, что в настоящее время обеими корпорациями ведутся работы по объединению интерфейсов Direct3D и OpenGL.
Еще есть умирающий API - Glide компании 3dfx, который аппаратно поддерживается только графическими чипами этой компании.
С появлением ОС с графическим интерфейсом прослойка между прикладной программой и аппаратурой стала "толще". Непосредственно на низком уровне видеокартой управляет ее драйвер - программа, поставляемая, как правило, самой фирмой-разработчиком видеокарты. А прикладная программа обращается к нему через вызовы четко определенного общего для всех драйверов абстрактного интерфейса (англ. API - Application Programming Interface). Таким образом, появилась аппаратная независимость, что явилось важным шагом вперед, с учетом все более разраставшегося множества видеокарт с ограниченной совместимостью друг с другом.
Программная реализация конвейера:
Два первых этапа (Этап генерации (G) - создание и модификация прикладных структур данных и Этап обхода (T) ) сильно зависят от приложения, от графического интерфейса пользователя и от способа организации самой прикладной программы (эти этапы могут быть совмещены). Поэтому графические системы общего назначения поддерживают главным образом последние три этапа, которые собственно и реализуют рендеринг.
Реальной и широко распространенной реализацией этапов рендеринга для универсального конвейера стал программный интерфейс для 3D графики OpenGL. Открытая Графическая Библиотека (OpenGL) появилась в середине 90-х. В настоящее время многие функции этой библиотеки реализованы аппаратно.
Поскольку OpenGL ориентирован исключительно на рендеринг, он может быть встроен в любую оконную систему или вовсе использоваться без нее.
Средства К. Г. используются в графическом интерфейсе пользователя, а также в прикладных программах, для того чтобы показать в наглядном виде математические или другие объекты, которые не являющиеся изображениями, например, графики
47
функций, диаграммы, представленные в виде картинки ситуации в вычислительной системе и т. п.
В OpenGL есть генераторы преобразования абстрактных данных в геометрическую форму, которую можно визуализировать. Генератор совершает преобразование абстрактных данных в геометрическую форму, которую уже можно визуализировать. Для примера, числовые данные могут быть превращены в цвет, изображающий модуль напряжения.
Входом для OpenGL служат данные, описывающие вершины геометрических объектов и их свойства, а выходом - изображение, сформированное конвейером обработки в буфере кадра. В конвейере OpenGL поддерживаются такие графические операции, которые могут быть реализованы как при наличии специализированной аппаратуры, так и без нее.
Вершины и примитивы
Вершина является атомарным графическим примитивом OpenGL и определяет точку, конец отрезка, угол многоугольника и т.д. Все остальные примитивы формируются с помощью задания вершин, входящих в данный примитив. Например, отрезок определяется двумя вершинами, являющимися концами отрезка.
С каждой вершиной ассоциируются ее атрибуты. В число основных атрибутов входят положение вершины в пространстве, цвет вершины и вектор нормали Положение вершины определяются заданием ее координат в двух-, трех-, или
четырехмерном пространстве (однородные координаты). Это реализуется с помощью нескольких вариантов команды glVertex*:
К модельно-видовым преобразованиям будем относить перенос, поворот и изменение масштаба вдоль координатных осей.
Материалы и освещение Для создания реалистичных изображений необходимо определить как свойства самого
объекта, так и свойства среды, в которой он находится. Первая группа свойств включает в себя параметры материала, из которого сделан объект, способы нанесения текстуры на его поверхность, степень прозрачности объекта. Ко второй группе можно отнести количество и свойства источников света, уровень прозрачности среды, а также модель освещения. Все эти свойства можно задавать, вызывая соответствующие команды OpenGL
Описание источников света Определение свойств материала объекта имеет смысл, только если в сцене есть
источники света. Иначе все объекты будут черными (или, строго говоря, иметь цвет, равный рассеянному цвету материала, умноженному на интенсивность глобального фонового освещения, см. команду glLightModel).
Добавить в сцену источник света можно с помощью команд
Текстурирование Под текстурой понимают некоторое изображение, которое надо определенным
образом нанести на объект, например, для придания иллюзии рельефности поверхности.
48

Наложение текстуры на поверхность объектов сцены повышает ее реалистичность, однако при этом надо учитывать, что этот процесс требует вычислительных затрат, особенно если OpenGL не поддерживается аппаратно.
Для работы с текстурой следует выполнить следующую последовательность действий:
1.выбрать изображение и преобразовать его к нужному формату;
2.передать изображение в OpenGL;
3.определить, как текстура будет наноситься на объект и как она будет с ним взаимодействовать;
4.связать текстуру с объектом
Реализации OpenGL показывают хорошую производительность на компьютерах самого разного класса - от ПК до графических суперкомпьютеров.
OpenGL не занимается выводом на экран - результирующее изображение помещается в буфер кадра, а управление дисплеем возлагается на оконную систему. Поэтому
OpenGL работает, например, в среде X Window System, NT, Windows 95 и OS/2.
Для подключения к новой среде требуется создание интерфейса с оконной системой. Эти свойства сделали OpenGL стандартом в технологии открытых систем.
В OpenGL уже упомянутый универсальный графический конвейер в общем виде получает конкретную детализацию, которую иллюстрирует рисунок
Представление графических данных Форматы графических данных
Способ организации информации в файл называется форматом.
В компьютерной графике применяют по меньшей мере три десятка форматов файлов для хранения изображений. Но лишь часть из них стала стандартом «де-
49
факто» и применяется в подавляющем большинстве программ. Как правило, несовместимые форматы имеют файлы растровых, векторных, трехмерных изображений, хотя существуют форматы, позволяющие хранить данные разных классов. Многие приложения ориентированы на собственные «специфические» форматы, перенос их файлов в другие программы вынуждает использовать специальные фильтры или экспортировать изображения в «стандартный» формат.
Графические форматы различаются по
-виду хранимых данных (растровая, векторная и смешанная формы),
-по допустимому объему данных
-параметрам изображения
-хранению палитры
-методике сжатия данных - по способам организации файла (текстовый, двоичный)
-структуре файла (с последовательной или ссылочной (индекснопоследовательной) структурой) и т.д.
Растровый файл состоит из точек, число которых определяется разрешением, измеряемым обычно в точках на дюйм (dpi) или на сантиметр (dpc). Очень важным фактором, влияющим, с одной стороны, на качество вывода изображения, а с другой - на размер файла, является глубина цвета, т.е. число разрядов, отводимых для хранения информации о трех составляющих (если это цветная картинка) или одной составляющей (для полутонового не цветного изображения). Например, при использовании модели RGB глубина 24 разряда на точку означает, что на каждый цвет (красный, синий, зеленый) отводится по 8 разрядов и поэтому в таком файле может храниться информация о 2^24 = 16,777,216 цветах (Обычно в этом случае говорят о 16 млн. цветов). Очевидно, что даже файлы с низким разрешением содержат в себе тысячи или десятки тысяч точек. Так, растровая картинка размером 1024х768 точек и с 256 цветами занимает 768 Кбайт. По сравнению с векторными форматами растровые устроены проще. Это прямоугольная таблица или матрица bitmap, в каждой ячейке или клетке которой установлен пиксель.
Считывание информации из файла растрового изображения сводится к следующим действиям:
1- Определяется размер изображения в виде произведения пикселей по горизонтали и вертикали;
2- Определяется размер пикселя;
3- Определяется битовая глубина, она характеризует информационную емкость пикселя в битах или цветовую разрешающую способность (количество цветов).
В цветовом RGB изображении каждый пиксель кодируется 24-битовым числом, поэтому в каждой ячейке битовой матрицы хранится число из 24 нулей и единиц.
Векторный способ записи графических данных применяется в системах автоматического проектирования (CAD) и в графических пакетах. В этом случае изображение состоит из простейших элементов (линия, ломаная, кривая Безье, эллипс, прямоугольник и т.д.), для каждого из которых определен ряд атрибутов (например, для замкнутого многоугольника - координаты угловых точек, толщина и цвет контурной линии, тип и цвета заливки и т.д.). Записывается также место объектов на странице и расположение их друг относительно друга (какой из них "лежит" выше, а какой ниже). Векторный формат является доказательством идеи древнегреческий
50