- •Конспект лекцій
- •1. Машинная графика. Основные понятия 6
- •2 Преобразования в компьютерной графике 17
- •3. Технические средства мг 39
- •4. Трехмерная графика 55
- •Введение
- •1. Машинная графика. Основные понятия
- •1.1. Концептуальная модель машинной графики
- •1.2 Программирование
- •1.2.1 Координатные пространства
- •1.2.2 Текущее положение
- •1.2.3 Примитивы вывода и атрибуты.
- •1.2.4 Видовые операции
- •1.2.5 Относительные координаты
- •2 Преобразования в компьютерной графике
- •2.1 Общая архитектура графической системы
- •2.3 Геометрические преобразования
- •2.3.1 Основные математические операции
- •2.3.2 Двумерные преобразования
- •2.3.3 Однородные координаты и матричное представление двухмерных преобразований
- •2.3.4 Композиция двумерных преобразований.
- •2.3.5 Вопросы эффективности
- •2.4 Растровая развертка примитивов.
- •2.4.1 Развеpтка векторов. Тангенсный алгоритм
- •2.4.2 Алгоритм Брезенхема
- •2.4.3 Растровая развертка окружностей
- •2.4.4 Заполнение областей
- •2.4.5 Отсечение примитивов вывода
- •2.4.6 Отображение окна на поле вывода
- •3. Технические средства мг
- •3.1. Архитектура систем мг
- •3.2 Кадровое запоминающее устройство
- •3.3. Видеоконтроллеры
- •4. Трехмерная графика
- •4.1 Трехмерные координатные пространства. Матричное представление трехмерных преобразований
- •4.2 Изображения трехмерных объектов
- •4.3 Проекции
- •4.4 Представление пространственных форм
- •4.4.1 Представление поверхностей полигональной сеткой
- •4.4.2 Задание плоскости
- •4.4.3 Бикубические поверхности
- •4.5. Алгоритмы удаления скрытых линий и поверхностей
- •4.5.1 Трехмерное отсечение
- •4.5.2. Удаление скрытых линий и поверхностей
- •4.6. Алгоритмы фотореалистичной закраски
- •4.6.1 Модель освещения
- •4.6.2. Однотонная закраска
- •4.6.3 Закраска методом Гуро
- •4.6.4 Метод закраски Фонга
- •4.6.5 Определение нормалей к поверхности, вершинам, ребрам
- •4.6.6 Определение вектора отражения
1.2.2 Текущее положение
Графические устройства строят видимое изображение, перемещая пишущий узел или орган (перо графопостроителя, электронный луч, лазерный луч и т.п.) по поверхности вывода. После вычерчивания очередного графического элемента пишущий узел остается в какой-то координате устройства. Это так называемое текущее положение пера, фиксируемое на видовой поверхности в координатном пространстве устройства. Зачастую ГП имеет аналогичную конструкцию, называемую текущим положением (ТП): ТП принимает значение, соответствующее текущему положению воображаемого пишущего органа в мировом координатном пространстве.
Для установки ТП в мировом координатном пространстве можно использовать вызов (PASCAL):
Procedure MoveTo (X, Y: Integer).
Текущее положение не отображается на видовой поверхности. В какой-то степени его можно отождествить с (невидимым) графическим курсором, однако следует помнить, что не все примитивы вывода перемещают текущее положение (см. например, модуль GRAF PASCAL).
1.2.3 Примитивы вывода и атрибуты.
В алфавитно-цифровых печатающих устройствах широко используется точечный принцип формирования букв. Аналогично любое графическое изображение может быть сформировано из точек. Чем меньше диаметр точек и чем меньше возможное расстояние между точками, тем качественнее изображение. В качестве примера может быть рассмотрен график Рис.1.2.
Для перемещения ТП и последующего задания индикации отдельной точки в новом ТП можно воспользоваться вызовом:
Procedure PutPixel (X, Y: Integer; Pixel: Word)
Рис.1.2. График - точечное представление
Примечание: В данном разделе использованы процедуры модуля GRAF PASCAL.
Учитывая это график Рис.1.2. требует 34 обращения к процедуре PutPixel. В тоже время, анализ графика показывает, что некоторые части графика могут быть аппроксимированы прямыми линиями. Для задания линии от ТП из которого начинается линия до точки, в которой она кончается может быть использована процедура
Procedure LineTo (X, Y: Integer);
где Х, Y - координаты конечной точки линии.
Используя рассмотренные процедуры MoveTo, PutPixel, LineTo запишем программу формирования графика Рис.1.3. (без учета формирования осей):
MoveTo(Xo, Yо)
LineTo(X1, Y1)
LineTo(X2, Y2)
LinеTo(X3, Y3)
LineTo(X4, Y4)
В данном случае используется только 10 обращений к процедурам вывода. Рассмотрим еще один пример. Пусть необходимо отобразить многоугольник (Рис.1.4).
Рис.1.3. Лианеризированный график
Изображение данного многоугольника может быть построено с использованием процедуры LINE:
MoveTo (Xo, Yо)
LineTo (X1, Y1)
LineTo (X2, Y2)
LineTo (X3, Y3)
LineTo (X4, Y4)
LineTo (Xо, Y )
Рис.1.4. Многоугольник
Изображение данного многоугольника может быть построено с использованием процедуры LINE :
MoveTo (Xo, Yо)
LineTo (X1, Y1)
LineTo (X2, Y2)
LineTo (X3, Y3)
LineTo (X4, Y4)
LineTo (Xо, Yо)
Однако, этот же объект может быть отображен и с помощью процедуры DrawPoly(NumPoints: Word; var PolyPoints).
MoveTo (Xo, Yо)
DrawPoly (6, Xo, X1; X2, X3; X4, Yо; Y1, Y2; Y3, Y4)
где Хi , Yi - координаты вершин,
6= (n+1) - число вершин.
Из приведенных примеров видим, что изображение может задаваться различными графическими элементами, причем длина программы в значительной степени зависит от сложности этих элементов. Будем понимать под термином “примитив вывода” базовый графический элемент, который может использоваться для построения изображения.
В большинстве применений требуется выводить не только графику, но и текст, т.е. цепочки литер. Текст может быть необходим для пояснений к графикам и для общения с пользователем.
Прикладная программа задает текст, вызывая имеющуюся в ГП процедуру ТЕХТ. Левый нижний угол буквы первой литеры задает положение цепочки литер на экране (в мировом пространстве). Величина букв, их взаимное расположение, ориентация могут задаваться атрибутами .
Поскольку положение первой литеры строго определено, перед вызовом ТЕХТ обычно производится вызов MOVE. Например, для графика температуры, показанного на Рис 1.5:
MoveTo(25,130);
SetTextStyle(DefaultFont, HorizDir, 1); {CharSize = 1}
SetTextJustify(LeftText, TopText);
OutText(Зона 5-го уровня стержня); {CP is updated}
OutText('DEF'); {CP is updated}
Рис.1.5. График с текстом
Базовые графические элементы, используемые для построения изображения, называют примитивами вывода [5]. В PASCAL и C используются такие примитивы вывода, как ТОЧКА, ЛИНИЯ (три варианта), прямоугольник, квадрат, окружность, эллипс, сектор, и др. (см. Приложение к данному разделу). Вид примитива определяется его параметрами: геометрическими и визуальными представлениями на видовой поверхности. Эти характеристики задаются набором атрибутов, связанных с примитивами.
Атрибут - характеристика примитива вывода, например, вид или цвет линии, расстояние между литерами и т.п. В приложении приведены атрибуты, используемые в PASCAL.
Таким образом, изображение можно рассматривать как совокупность графических примитивов, которые одновременно выведены на видовую поверхность.
