Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Popov_vorobev

.pdf
Скачиваний:
7
Добавлен:
22.06.2018
Размер:
1.57 Mб
Скачать

Московский

государственный университет печати имени Ивана Федорова

Д.И. Попов, Е.В. Воробьев

Компьютерная графика

Методические указания к лабораторным работам

для студентов, обучающихся по специальности 09.03.01 — Информатика и вычислительная техника (бакалавриат)

Москва

2014

71

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Московский государственный университет печати имени Ивана Федорова

Д.И. Попов, Е.В. Воробьев

Компьютерная графика

Методические указания к лабораторным работам

для студентов, обучающихся по специальности

09.03.01(230100) — Информатика

ивычислительная техника (бакалавриат)

Москва

2014

Попов Д.И., Воробьев Е. В.

Компьютерная графика : методические указания к лабораторным работам / Д.И. Попов, Е.В. Воробьев ; Моск. гос. ун-т печати имени Ивана Федорова. — М. : МГУП имени Ивана Федорова, 2014. — 64 с.– М.: МГУП, 2014. — 70 с.

Учебно-методическое пособие содержит теоретический материал и задания для лабораторных занятий по алгоритмам закраски поверхностей, удаления невидимых поверхностей, отсечения отрезков и многоугольников, построения графиков функций и кривых высших порядков, прорисовки динамических и трехмерных графических объектов. В каждом разделе представлен теоретический материал и практическая часть, необходимая при выполнении лабораторных работ. Методические указания к лабораторным работам рассчитаны на студентов второго курса бакалавриата, обучающихся по специальности 09.03.01 «Информатика и вычислительная техника».

©Попов Д.И., Воробьев Е.В., 2014

©Московский государственный университет печати имени Ивана Федорова, 2014

2

Содержание

 

Введение...........................................................................................................

4

Лабораторная работа № 1

 

Алгоритмы закраски поверхностей. Плоская закраска.............................

6

Лабораторная работа № 2

 

Алгоритм удаления невидимых поверхностей,

 

использующий z-буфер..............................................................................

13

Лабораторная работа № 3

 

Отсечение отрезков. Реализация алгоритма Сазерленда-Коэна.............

21

Лабораторная работа № 4

 

Отсечение многоугольников.

 

Реализация алгоритма Сазерленда-Ходжмена.........................................

31

Лабораторная работа № 5

 

Построение графиков функции и кривых высших порядков.................

39

Лабораторная работа № 6

 

Разработка приложения «Часы» с использованием графической

 

библиотеки OpenGL ...................................................................................

47

Лабораторная работа № 7

 

Трехмерная графика в OpenGL. ................................................................

56

Приложения....................................................................................................

62

Библиографический список..........................................................................

68

3

Введение

Данные лабораторные работы предназначены для изучения разделов дисциплины «Компьютерная графика» для закрепления на практике теоретических знаний по алгоритмам закраски поверхностей, удаления невидимых поверхностей, отсечения отрезков и многоугольников, построения графиков функций и кривых высших порядков, прорисовки динамических и трехмерных графических объектов. Цикл лабораторных работ представлен для обучающихся по направлению 09.03.01 «Информатика и вычислительная техника», и может быть использован студентами других смежных направлений обучения.

Приобретаемые компетенции:

стремление к саморазвитию, повышению своей квалификации и мастерства (ОК-6);

осознание сущности и значения информации в развитии современного общества; владение основными методами, способами и средствами получения, хранения, переработки информации (ОК-11);

владение методиками использования программных средств для решения практических задач (ПК-2).

Цели данных лабораторных работ: обучение практическим на-

выкам реализации основных алгоритмов компьютерной графики: закраски поверхностей, удаления невидимых поверхностей, отсечения отрезков и многоугольников, построения графиков функций и кривых высших порядков, прорисовки динамических и трехмерных графических объектов.

Поставленные задачи: изучить теоретические положения и программно реализовать конкретный алгоритм.

В результате выполнения лабораторных работ студент должен:

знать: основные алгоритмы компьютерной графики;

4

уметь: использовать современные программные средства для реализации соответствующих алгоритмов;

владеть: специальной терминологией; основными методами программирования графических приложений; опытом выбора программных средств для разработки графических приложений.

5

Лабораторная работа № 1

Алгоритмы закраски поверхностей. Плоская закраска

Теоретическая часть

Для создания реалистичных компьютерных 3D-моделей используются различные методы, основные из которых — это удаление невидимых частей поверхностей и закраска подходящими цветами видимых. Для удаления невидимых поверхностей применяются различные алгоритмы. Один из наиболее простых — метод z-буфера. Но в данной лабораторной работе речь пойдет о закраске поверхностей. Сложность данного вопроса заключается в том, что поверхности нельзя просто закрасить определенными для них цветами. Так, например, если мы смотрим на куб, грани которого окрашены в один и тот же желтый цвет, все они для нас будут выглядеть немного по-разному, в зависимости от того, как на них падает свет. Если освещение довольно равномерное, то различия в оттенках будут не так заметны. Если же объект находится в темной комнате, и прямо на него с одной стороны направлен яркий источник света, то цвет его граней может колебаться от белого (грань, на которую прямо направлен яркий свет), до черного (грани, на которые свет не падает вообще). Конечно, когда речь идет о каких-то сложных комбинациях графических объектов, то учитывать надо очень много факторов: свет различных источников, отраженный свет, тени и прочее. Но в данном случае, мы рассмотрим только конкретные алгоритмы закраски поверхностей объекта, освещенного одним источником света. Существует три основных алгоритма закраски поверхностей: плоская закраска, метод Гуро и метод Фонга. Но прежде, чем перейти к их изучению, мы рассмотрим некоторые вопросы, касающиеся самого физического процесса взаимодействия световой энергии с различными поверхностями.

6

Итак, каждая поверхность, в зависимости от ее цвета, материала и формы может поглощать, отражать и пропускать световую энергию. Объект можно увидеть только благодаря отраженному и пропущенному свету. Часть света, в любом случае, будет поглощаться и превращаться в тепло, однако если объект поглощает весь свет, который на него падает, то этот объект будет невидим, и называться он будет «абсолютно черным телом». Поглощаемыми объектом длинами волн определяется цвет объекта. Например, оранжево-красная ткань выглядит так потому, что она отражает данную часть спектра, а фиолетово-синюю и зеленую поглощает. Там, где световых лучей нет, цвет объекта определить нельзя.

Самый простой метод закраски поверхностей — плоская закраска. Конечно, он добавляет мало реалистичности изображению, но он наиболее прост в реализации. Суть его заключается в том, что в начале процесса закраски, вычисляется нормаль для каждой грани объекта. Вектор нормали направлен от внешней поверхности грани. Также определяется направление луча, выпущенного некоторым абстрактным источником света. После чего, компьютер вычисляет для каждой грани угол между её нормалью и источником света. Наиболее яркими будут те грани, нормаль которых параллельна направлению света. А те грани, у которых угол между нормалью и лучом составляет 90 градусов и больше, рисуются черными. Другими словами, яркость поверхности прямо пропорциональна косинусу угла между нормалью и лучом, так как косинус нуля градусов равен единице, а косинус 90 градусов равен нулю.

Следующий метод закраски, который будет рассмотрен в данном пособии — метод Гуро. По сравнению с плоской закраской он добавляет больше реалистичности модели, так как нормаль в данном методе вычисляется для каждой вершины поверхности отдельно. Вершиной, в данном случае, считается точка, в которой соединяются многоугольники. А нормаль к ней высчитывается как среднее арифметическое нормалей, соединенных в ней многоугольников. Интенсивность освещения для вершин высчитывается так же, как при плоской закраске, а для ребер и поверхности многоугольника находится с помощью интерполяции яркости вершин.

7

Наиболее затратный, с точки зрения ресурсов компьютера метод — метод Фонга. Однако он дает наилучший результат в плане реалистичности объекта. Суть данного метода заключается в том, что интерполируются в нем значения векторов нормалей, а не яркости вершин, как в методе Гуро. Таким образом, для каждого пикселя объекта находится нормаль и отдельно просчитывается уровень освещенности.

Практическая часть

В данной лабораторной работе студентам предлагается реализовать наиболее простой алгоритм, из описанных выше — алгоритм плоской закраски. Далее приводятся минимальные требования к реализации. На форму должен быть помещен графический элемент, например, объект класса TImage. Кроме того, пользователю должна быть предоставлена возможность ввести угол между нормалью к плоскости и источником света. В зависимости от введенного угла, графический элемент должен окрашиваться в соответствующий цвет в градациях серого. Например, если пользователь ввел угол 0°, область вывода должна закрашиваться в белый цвет. Если угол находится в диапазоне от 90° до 270°, область закрашивается в черный цвет.

Для решения данной задачи необходимо учитывать два основных момента. Серому цвету в пространстве RGB соответствуют комбинации с тремя одинаковыми значениями красного, зеленого

иголубого цветов. И, в данном случае, это значение должно быть пропорционально косинусу угла между вектором нормали к грани

инаправлением луча света. Итак, для того чтобы закрасить некоторую область серым цветом, соответствующим введенному пользователем углу, необходимо определить косинус этого угла и умножить полученное значение на 255 (255, в данном случае — это максимальное число, которое может быть присвоено каждой цветовой составляющей).

Для того, чтобы в Delphi найти косинус угла, необходимо подключить в разделе uses библиотеку Math, и вызвать функцию cos(). В качестве параметра ей передается значение угла в радианах. Поэтому, если пользователь вводит угол в градусах,

8

то его надо умножить на число Пи и разделить на 180. Число Пи — это встроенная константа в Delphi. Имя этой констан-

ты pi.

Так, например, если пользователь задает значение угла в градусах с помощью компонента типа TTrackBar (данный компонент находится во вкладке Win32), то получение значения косинуса может выглядеть следующим образом:

var

cosNR: real;

begin

cosNR:=cos(TrackBar1.Position*(pi/180));

end;

Еще один важный момент, который стоит описать в данном пособии — это работа с компонентом TImage в Delphi, который располагается во вкладке Additional. Для выполнения этой лабораторной работы студентам необходимо знать только то, как нарисовать в данном компоненте прямоугольник и закрасить его определенным цветом. В последующих лабораторных работах будут рассмотрены и другие возможности данного компонента. Итак, для формирования изображения внутри компонента используется свойство типа TCanvas. У него есть целый набор методов и свойств, но пока нам необходимы только два метода и одно свойство: FillRect(), Rectangle() иBrush.Color, соответственно.

Метод FillRect() принимает в качестве параметра «прямоугольник» переменную типа TRect и очищает область данного прямоугольника. Метод Rectangle() используется для прорисовки прямоугольника. Он принимает четыре целочисленных переменных: координаты верхнего левого угла, ширину и высоты прямоугольника. Свойства Brush.Color задает цвет «кисти», которой будет осуществляться прорисовка. Далее приведен пример того, как может быть нарисован прямоугольник белого цвета по всей поверхности компонента TImage:

9