- •(Фгбоу впо «ВятГу»)
- •Комплекс лабораторных работ 1-8
- •Лабораторная работа №1. Приёмы работы в графическом редакторе и использование графических библиотек
- •Лабораторные работы №2,3. Реализация алгоритмов растровой развертки отрезков
- •Лабораторные работы № 4,5 Реализация алгоритмов растровой графики для заполнения сплошных областей
- •Лабораторная работа № 6. Реализация двумерного алгоритма отсечения отрезков Сазерленда-Коэна
- •Лабораторная работа № 7. Аффинные преобразования на плоскости
- •Лабораторная работа № 8. Представление и проецирование трехмерных объектов
- •Лабораторная работа №9. Аффинные преобразования в пространстве
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Вятский государственный университет»
(Фгбоу впо «ВятГу»)
Факультет автоматики и вычислительной техники
Кафедра электронных вычислительных машин
С.Д. Блинова
Комплекс лабораторных работ 1-8
Методические указания
по выполнению лабораторных работ
Дисциплина
«Компьютерная графика»
Специальность 230100.62
«Информатика и вычислительная техника»
Киров,2012
Содержание
Лабораторная работа №1. Приёмы работы в графическом редакторе и использование графических библиотек 4
Лабораторные работы №2,3. Реализация алгоритмов растровой развертки отрезков 11
Лабораторные работы № 4,5 Реализация алгоритмов растровой графики для заполнения сплошных областей 20
Лабораторная работа № 6. Реализация двумерного алгоритма отсечения отрезков Сазерленда-Коэна 25
Лабораторная работа № 7. Аффинные преобразования на плоскости 28
Лабораторная работа № 8. Представление и проецирование трехмерных объектов 33
Лабораторная работа №9. Аффинные преобразования в пространстве 37
Лабораторная работа №1. Приёмы работы в графическом редакторе и использование графических библиотек
Цель работы:
научиться работать в графическом редакторе Paint;
научиться применять в программах на языке Pascal основные графические примитивы двумерной компьютерной графики - функции универсальной графической библиотеки BGI.
Краткие теоретические сведения
Графические редакторы - основная составная часть пакетов иллюстративной графики, а также приложения многих других графических пакетов и системных оболочек. Подразделяются графические редакторы на растровые и векторные, служат для создания и модификации иллюстраций, а также для их сохранения с целью дальнейшего использования. Они содержат:
- строку меню;
- набор графических операций (2D- или 3D -примитивов) и инструментов (кисть, перо, резиновая нить, ластик, полигон и т.д.);
- поле образцов толщины линий;
- палитру доступных цветов для рисования контура и закраски сплошных областей;
- строку заголовка, линейки прокрутки.
Графические редакторы позволяют:
"резать", "склеивать", "стирать", "зеркально отображать", масштабировать, инвертировать, копировать, поворачивать произвольные части изображения;
обращаться через строку меню к библиотеке готовых объектов и вставлять их в создаваемые рисунки;
применять для рисования разнообразные инструменты ("кисти", "краски", трафареты, "пульверизаторы" и т.д.);
пользоваться разными (в том числе масштабируемыми) шрифтами для создания рекламы, заставок, объявлений.
Paint - простой графический растровый редактор для создания иллюстраций. Запускается щелчком мыши по соответствующей пиктограмме на рабочем столе Windows. Предоставляет стандартный пользовательский набор инструментов для рисования мышью и некоторые сервисные возможности работы с объектами в главном меню простого и интуитивно понятного интерфейса. Можно пользоваться готовыми рисунками и сохранять свои нарисованные (в формате .bmp).
В процессе практической работы приобретаются навыки рисования и создается иллюстрация. Например, научиться создавать простейший рисунок можно, выполнив следующее задание: создать условное изображение вольтметра на электрических схемах. Порядок работы:
Запустите программу Paint. Убедитесь, что на палитре цветов заданы: основной цвет (выбор левой клавишей мыши) - черный, фон (выбор правой клавишей мыши)- белый.
В меню Рисунок выберите команду Атрибуты. В диалоговом окне Атрибуты задайте ширину рисунка 300 точек и высоту - 200 точек. Закройте окно Атрибуты.
Выберите инструмент Эллипс, в палитре настройки инструмента - без заполнения.
С помощью клавиши Shift методом протягивания нарисуйте окружность в центре поля диаметром примерно в половину высоты рисунка. Отпустите клавишу Shift.
Выберите инструмент Линия. Вариант толщины - второй сверху.
С помощью клавиши Shift нарисуйте небольшой горизонтальный отрезок в стороне от окружности.
Выберите инструмент Выделение, прозрачный фон.
Методом протягивания выделите прямоугольный фрагмент, включающий отрезок прямой, но не затрагивающий окружность. Клавишами Ctrl+X поместите его в буфер обмена.
С помощью Ctrl+V вставьте отрезок на рисунок (выделение сохранится).
Переместите выделенный фрагмент впритык к окружности слева по центру. Обратите внимание, что фон фрагмента не перекрывает окружность.
Повторите пункты 10-11, но отрезок присоедините справа от окружности.
Выделите инструмент Текст.
Методом протягивания создайте область ввода текста внутри окружности. Введите символ “V”. С помощью панели Шрифты задайте подходящий размер и начертание буквы.
Методом перетаскивания за границу области ввода текста поместите букву “V“ в центр окружности.
Щелкните вне области ввода текста, чтобы превратить текст в часть рисунка.
Сохраните рисунок в файле Scheme.bmp.
Такую же иллюстрацию можно получить и другим путем, написав программу вывода ее элементов на языке программирования.
На растровых графических дисплеях изображение представляется прямоугольной матрицей точек (пикселов) определенного цвета. Для этого компьютер имеет видеоадаптер – устройство, которое хранит в своей памяти, называемой видеопамятью, изображение и обеспечивает регулярное (не менее 75 раз в секунду) отображение этой памяти на экран дисплея. На каждый пиксел изображения отводится фиксированное количество битов видеопамяти, зависящее от ее объема, типа и режима видеоадаптера. Практически каждый видеоадаптер поддерживает несколько режимов работы, различающихся размерами матрицы пикселов (разрешением экрана), количеством одновременно отображаемых на экране цветов, количеством видеостраниц.
Фактически любая графическая операция сводится к работе с отдельными пикселами - нарисовать точку заданного цвета в определенном месте экрана или узнать цвет заданной точки. Точка - простейший примитив 2D-графики. Однако, практически все графические библиотеки предоставляют пользователю и более сложные примитивы - объекты, необходимыми для эффективной работы. Среди объектов можно выделить следующие основные группы:
- линейные изображения(растровые образы линий)
- сплошные объекты (растровые образы закрашенных областей)
- шрифты (текстовые символы)
- изображения (прямоугольные матрицы пикселов).
Как правило, каждый универсальный язык программирования содержит возможность работы с основными группами графических объектов. В среде Turbo Pascal такая возможность обеспечивается библиотекой BGI - Borland's Graphics Interface с набором драйверов (небольших программ сопряжения с видеоадаптерами) для основных типов адаптеров. В начале работы с библиотекой определяется тип имеющегося адаптера и соответствующий драйвер загружается в память, чем достигается почти полная машинная независимость программ. Библиотека находится в модуле Graph, поэтому для работы с ней необходимо использовать оператор uses Graph;
Основные процедуры BGI:
Инициализация и завершение работы с библиотекой
procedure InitGraph(var Dr, Mode:integer; DrPath:string) - инициализацирует библиотеку; обязательна и первая из используемых процедур при работе в графическом режиме.
Ее паpаметpы: Dr - тип драйвера, нужно указать соответствующую константу (VGA, например) или значение Detect, тогда библиотека сама определит тип имеющегося адаптера и выберет для него режим наибольшего разрешения.
Mode - режим работы видеодаптера, нужно указать соответствующую константу (например, VGAHi) или просто переменную. Если Dr=Detect, то параметр Mode не используется.
DrPatch -путь к файлу с драйверами (например,"d:\tp7\bgi")
function GraphResult: integer - возвращает код завершения предыдущей графической операции (значение grOk соответствует успешному завершению)
procedure CloseGraph - завершает работу с библиотекой, закрывает ее, отменяет графический режим работы.
function GetMaxX: integer; function GetMaxY: integer - возвращают максимальное значение соответственно X и Y- координаты пиксела.
Function GetGraphMode: integer - возвращает текущий графический режим
procedure ClearViewPort - очищает экран.
Работа с отдельными пикселами
Procedure PutPixel(x,y : integer; col : word) - рисует точку с координатами (x,y) цвета col
function GetPixel(x,y: integer) : word - возвращает цвет пиксела с координатами (x,y).
Рисование линейных объектов
procedure SetColor(col:word) - устанавливает цвет линии.
procedure SetLineStyle(style,pattern,width: word) - определяет тип (style) и толщину (width) линии.
По умолчанию линия сплошная (style=SolidLn) и ее толщина равна одному пикселу. Если стандартные параметры не устраивают, можно задать style=UserBitLn, тогда шаблон рисования линии определяется пользователем, задается вторым параметром (pattern= имя восьмибитовой переменной, в которой значение бита 1 означает, что точка ставится, 0 - нет).
procedure Line(x1,y1,x2,y2 : integer) - рисует линию от точки с координатами (x1,y1) до точки с (x2,y2).
procedure Circle(x,y,r : integer) - рисует окружность радиуса r с центром в точке (x,y).
procedure Arc(x, y, StartAngle, EndAngle, r: integer) - рисует дугу окружности радиуса r с центром в точке (x,y), начиная с угла StatrAngle и заканчивая углом EndAngle.
procedure Ellipse(x, y, StartAngle, EndAngle, rx, ry: integer) -рисует эллипс с центром в точке (x,y) и полуосями rx, ry, начиная с угла StatrAngle и заканчивая угломEndAngle.
Рисование сплошных объектов
procedure SetFillStyle(pattern, col: word) - задает шаблон и цвет закраски (по умолчанию белый).
procedure SetFillPattern (pattern: FillPatternType, col: word) -задает пользовательский шаблон и цвет закраски (по умолчанию белый). Тип FillPatternType: typeFillPatternType = array [1..8] of byte; Стандартные шаблоны для закраски: SolidFill (по умолчанию), LineFill, SlashFill и т.д. Если pattern=UserFill - шаблон задает пользователь с помощью процедуры SetFillPattern.
procedure Bar(x1,y1,x2,y2 : integer) - закрашивает прямоугольник с левым верхним (x1,y1) и правым нижним (x2,y2) углами.
procedure FloodFill(x,y: integer, BordCol: word) - закрашивает связную область, ограниченную цветом BordCol и содержащую внутри себя точку с координатами (x,y).
Вывод текста
procedure SetTextStyle (font, direction, size: word) – выбирает шрифт и его параметры. font - задает идентификатор одного из стандартных шрифтов: DefaultFont - растровый шрифт 8*8 пикселов из ПЗУ видеоадаптера. TriplexFont, GothicFont, SansSerifFont, SmallFont - пропорциональные векторные шрифты, входящие в комплект Turbo Pascal (каждый шрифт хранится в файле типа CHR, подгружается в оперативную память по вызову данной процедуры с этим шрифтом). direction - может принимать значения:HorizDir - вывод по горизонтали и VertDir - по вертикали. size - масштабный множитель (1,2,...,10), задает во сколько раз нужно увеличить размер шрифта перед выводом на экран.
procedure OutTextXY(x,y: integer; text: string) - выводит строку текста (text) так, что точка (x,y) оказывается вершиной левого верхнего угла первого символа.
Изменение палитры
Палитра используется для отображения на экране большего количества цветов, чем имеется в видеопамяти у изображения.
procedure SetPalette (col: word; ColVal: ShortInt) - устанавливает для логического цвета col физический ColVal).
procedure SetRGBPalette (col, RedVal, GreenVal, BlueVal: integer) - устанавливает для логического цвета col значения его RGB-составляющих).
Работа с видеостраницами
procedure SetVisualPage (page: word) - устанавливает видимой (изображаемой на экране) страницу номер page (по умолчанию 0).
procedure SetActivePage (page: word) - устанавливает активной (с которой работает библиотека в данный момент и куда происходит весь вывод) страницу номер page (по умолчанию 0).
Пример программы с выводом изображения деревьев:
uses Graph,crt;
var
grDriver: Integer; grMode: Integer;
procedure derevo(x,y:integer);{Рисование дерева}
begin
setfillstyle(1,4); bar(x,y,x+10,y-100); { прямоугольник}
setcolor(green); ellipse(x+5,y-160,0,360,20,60); ellipse(x+5,y-160,0,360,19,59);
setfillstyle(1,10); floodfill(x+5,y-160,green);
end;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,'c:\kg\tp7\bgi');{ Инициализация графики }
setcolor(15); { цвет рисования контуров }
setlinestyle(0,0,1); { стиль линий}
line(0,300,640,300);{линия от (0,300) до (640,300)}
setfillstyle(9,10); floodfill(10,400,15); {закраска}
setfillstyle(1,1); floodfill(10,10,15); derevo(50,350); derevo(100,400); derevo(160,310); derevo(200,450); derevo(280,330);setcolor(yellow); circle(540,100,50); {окружность}
setfillstyle(1,yellow); floodfill(540,100,yellow); setfillstyle(1,15); setcolor(15); fillellipse(500,150,25,25);{ закрашенный эллипс}
fillellipse(530,130,30,30); fillellipse(550,150,20,20); fillellipse(530,160,50,20); settextstyle(0,0,2); { стиль текста}
outtextxy(500,450,'Park'); {текст} readkey; {ожидание нажатия клавиши}
end.
Задание на лабораторную работу:
Создать рисунок в графическом редакторе Paint с помощью набора инструментов, меню и готовых объектов - рисунков с расширением bmp.
Используя примеры из помощи по модулю GRAPH среды TURBO PASCAL написать и выполнить программу на языке PASCAL c основными процедурами библиотеки BGI (можно воспользоваться предложенным примером для вывода деревьев).
Требования к защите лабораторной работы
Защита лабораторной работы состоит из демонстрации преподавателю результатов выполнения заданий на лабораторную работу и ответов на задаваемые преподавателем вопросы по ходу демонстрации.
Требования к отчету
Отчет выполняется на отдельных листах формата А4. Содержит титульный лист, оформленный согласно требованиям кафедры и исходный текст программы - результат выполнения пункта 2 задания на лабораторную работу.
Вопросы для самоподготовки:
Что такое пиксел, растровое изображение, примитив, палитра, видеоадаптер видеостраница, режим работы адаптера?
Какие основные группы графических объектов предоставляет TurboPascal и в каком виде?
Каким образом обеспечивается машинная независимость программы, использующей функции библиотеки BGI?
Основное назначение графических редакторов?
Основные возможности, предоставляемые пользователям графических редакторов?
Литература
Шикин, Е. В. Компьютерная графика: Динамика, реалист. изображения [текст] / Е. В. Шикин, А. В. Боресков. - М.: ДИАЛОГ-МИФИ, 1996. - 287c.: ил.
Боресков, А. В. Компьютерная графика: первое знакомство [текст] / А. В. Боресков, Е. В. Шикин, Г. Е. Шикина; Под ред. Е. В. Шикина. - М.: Финансы и статистика, 1996. - 176c.: ил. - (Диалог с компьютером).