Основы компьютерной графики
Покупка
Основная коллекция
Тематика:
Графика и анимация на компьютере
Издательство:
Сибирский федеральный университет
Год издания: 2018
Кол-во страниц: 88
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7638-3968-5
Артикул: 714334.01.99
Представлены основные примитивы графической библиотеки OpenGL. приведены примеры использования простейших геометрических преобразований, примеры отображения графиков функций и геометрических фракталов, механизмы установки камеры, проекций отображения, алгоритмы наложения текстур и управления освещением сцены. Предназначено для студентов, обучающихся по программе бакалавриата по направлениям подготовки 01.03.01 «Математика». 01.03.02 «Прикладная математика и информатика» и 02.03.01 «Математика и компьютерные науки».
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 01.03.01: Математика
- 01.03.02: Прикладная математика и информатика
- 02.03.01: Математика и компьютерные науки
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство науки и высшего образования Российской Федерации Сибирский федеральный университет С. Н. Баранов, С. Г. Толкач Основы компьютерной графики Учебное пособие Красноярск СФУ 2018
УДК 004.92(07) ББК 32.973я73 Б241 Р е ц е н з е н т ы: Пак Н. И., доктор педагогических наук, профессор, заведующий кафедрой информатики и информационных технологий в образовании Красноярского государственного педагогического университета им. В.П. Астафьева; Исаев С. В., кандидат технических наук, доцент, заместитель директора по научной работе ИВМ СО РАН – ОП ФИЦ КНЦ СО РАН Баранов, С. Н. Б241 Основы компьютерной графики : учеб. пособие / С. Н. Баранов, С. Г. Толкач. – Красноярск : Сиб. федер. ун-т, 2018. – 88 с. ISBN 978-5-7638-3968-5 Представлены основные примитивы графической библиотеки OpenGL, приведены примеры использования простейших геометрических преобразований, примеры отображения графиков функций и геометрических фракталов, механизмы установки камеры, проекций отображения, алгоритмы наложения текстур и управления освещением сцены. Предназначено для студентов, обучающихся по программе бакалавриата по направлениям подготовки 01.03.01 «Математика», 01.03.02 «Прикладная математика и информатика» и 02.03.01 «Математика и компьютерные науки». Электронный вариант издания см.: http://catalog.sfu-kras.ru УДК 004.92(07) ББК 32.973я73 ISBN 978-5-7638-3968-5 © Сибирский федеральный университет, 2018
Оглавление Введение...................................................................................................... 4 Глава 1. Введение в компьютерную графику..................................... 6 1.1. Графическая библиотека OpenGL ..................................................... 6 1.2. Установка цвета................................................................................... 9 1.3. Рисование геометрических примитивов ......................................... 11 Глава 2. Преобразования на плоскости и в пространстве............. 19 2.1. Использование базовых преобразований........................................ 19 2.2. Установка перспективы и камеры ................................................... 22 Глава 3. Основы OpenGL...................................................................... 29 3.1. Вывод графиков функций................................................................. 29 3.2. Установка освещения........................................................................ 37 3.3. Наложение текстур............................................................................ 40 3.4. Использование списков отображения............................................. 44 Глава 4. Моделирование двух- и трехмерных сцен........................ 49 4.1. Использование 3D-объектов библиотеки GLAUX ........................ 49 4.2. Создание своих 3D-объектов ........................................................... 53 4.3. Построение фракталов ...................................................................... 70 Варианты практических работ............................................................ 80 Практическая работа № 1. Графические примитивы ........................... 80 Практическая работа № 2. Анимация графических примитивов....... 82 Практическая работа № 3. Вывод графика функции............................ 82 Практическая работа № 4. Наложение текстур..................................... 83 Практическая работа № 5. Построение 3D-сцены................................ 83 Практическая работа № 6. Построение фракталов............................... 83 Библиографический список ................................................................. 85
Компьютерная графика ‒ область деятельности, в которой изо бражения создаются с помощью компьютерных технологий. Компьютерная графика используется в научной деятельности для иллюстрирования результатов экспериментов, построения графиков, диаграмм и чертежей. С развитием компьютерных технологий расширяются и сферы применения компьютерной графики. Настоящее учебное пособие предназначено для ознакомления студентов с основами компьютерной графики. В пособии рассмотрены основные функции графической библиотеки OpenGL, подробно описаны примеры создания приложений, использования графических примитивов, установки различных параметров и т. д. Пособие содержит иллюстрации результатов работы программ, которые демонстрируют различные функции графической библиотеки OpenGL. Все примеры выполнены в среде разработки Visual Studio 2015 на языке программирования C++. В первой главе идет речь о библиотеке OpenGL. Приводятся примеры создания приложений с помощью библиотеки «glaux.h» или библиотеки «glut.h». Далее обозначаются основные функции установки цвета, приведено описание графических примитивов. Во второй главе даны простейшие геометрические преобразова ния и демонстрируются примеры установки перспективных проекций, работы с камерой, обработки нажатия клавиш клавиатуры и изменения положения камеры. В третьей главе представлены алгоритмы построения графиков алгебраических функций и их производных, алгоритмы построения функций, заданных в параметрическом виде. Рассмотрены примеры вывода графиков функций от двух переменных в трехмерном пространстве. Также приведены функции установки освещения, алгоритмы наложения текстур на графические примитивы и алгоритмы применения списков отображения для оптимизации работ приложения.
В четвертой главе приведены примеры использования трехмер ных объектов из библиотеки «glaux.h», а также примеры построения 3D-сцены из своих 3D-объектов. Далее следуют иллюстрации основных геометрических фракталов и рассмотрены алгоритмы построения фракталов с помощью графических примитивов. В завершение представлены примеры практических работ, кото рые должны быть выполнены для закрепления пройденного материала. Настоящее пособие поможет успешно освоить основные алго ритмы и понятия компьютерной графики и позволит применять функции библиотеки OpenGL для создания графических приложений с использованием простейших примитивов, текстур и геометрических преобразований.
OpenGL (Open Graphics Library ‒ открытая графическая библио тека, графическое API) ‒ спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двухмерную и трехмерную компьютерную графику. Библиотека OpenGL была разработана как независимый от аппа ратного обеспечения интерфейс, поэтому не содержит функций для создания окон или для обработки пользовательского ввода. Для этих операций должны применяться средства той операционной системы, в которой создается приложение. По тем же причинам в OpenGL нет высокоуровневых функций для описания моделей трехмерных объектов. При обращении к библиотеке OpenGL необходимо пользоваться набором геометрических примитивов – точек, линий и многоугольников – и с их помощью создавать более сложные объекты. Основные графические операции, которые выполняет OpenGL для вывода изображения на экран: • конструирует фигуры из геометрических примитивов (прими тивами в OpenGL являются точки, линии, полигоны, битовые карты и изображения); • позиционирует объекты в трехмерном пространстве и выбира ет точку наблюдения для осмотра полученной композиции; • вычисляет цвета для всех объектов; цвета могут быть опреде лены приложением, получены из расчета условий освещенности, вычислены при помощи текстур, наложенных на объекты или из любой комбинации этих факторов; • преобразует математическое описание объектов и ассоцииро ванной с ними цветовой информации в пиксели на экране.
Этот процесс называется растеризацией (или растровой разверткой). Рассмотрим пример приложения, созданного в Visual Studio 2015, с использованием библиотеки «glaux.h». Необходимо создать пустой проект, имеющий тип Консольное приложение Win32, далее нужно скопировать в директорию с исходниками файлы GLAUX.H и GLAUX.LIB, после чего добавить в проект файл исходного кода и внести в него текст из примера 1. Пример 1. Первое приложение с использованием библиотеки «glaux.h» #include "glaux.h" using namespace std; // подключение предкомпилированных библиотек #pragma comment (lib, "opengl32.lib") #pragma comment (lib, "glu32.lib") #pragma comment (lib, "glaux.lib") // подключение библиотеки legacy_stdio_definitions // для Visual Studio 2015 и выше #pragma comment(lib, "legacy_stdio_definitions.lib") // функция вызывается при изменении размеров окна void CALLBACK resize(int width, int height) { // установка области вывода glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); //выбор матрицы проекции glLoadIdentity(); // сброс текущей матрицы преобразований // установка перспективы gluPerspective(45.0, (GLfloat)width / height, 1.0, 100.0); // установка камеры gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0); glMatrixMode(GL_MODELVIEW); // выбор матрицы отображения glEnable(GL_DEPTH_TEST); // установка теста глубины } // функция вызывается при рисовании void CALLBACK display(void) { // очистка цвета и глубины glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // сброс текущей матрицы преобразований // начало рисования примитива "четырехугольник" glBegin(GL_QUADS); glVertex3d(–1, –1, 0); // задание вершины примитива glVertex3d(–1, 1, 0); // задание вершины примитива glVertex3d(1, 1, 0); // задание вершины примитива
glVertex3d(1, –1, 0); // задание вершины примитива glEnd(); // окончание рисования примитива // обмен переднего и заднего буферов, вывод на экран auxSwapBuffers(); } // основная функция программы void main() { // задание позиции и размеров окна auxInitPosition(0, 0, 800, 600); // установка режима отображения auxInitDisplayMode(AUX_RGB | AUX_DEPTH | AUX_DOUBLE); auxInitWindow(L"Glaux Template"); // инициализация окна auxIdleFunc(display); // задание функции рисования // задание функции изменения размеров окна auxReshapeFunc(resize); glClearColor(0, 0, 0, 0.5);// задание цвета очистки экрана // задание параметра очистки буфера глубины glClearDepth(1.0); auxMainLoop(display); // вызов основного цикла приложения } После запуска приложения создастся окно, на котором будет изображен белый квадрат, как показано на рис. 1. Рис. 1. Первое приложение Рассмотрим пример приложения, созданного в Visual Studio 2015 с использованием библиотеки «glut.h». Нужно создать пустой
проект, имеющий тип Консольное приложение Win32, далее добавить в проект файл исходного кода и внести в него текст из примера 2. Пример 2. Приложение с использованием библиотеки «glut.h» #include <GL/glut.h> void display(void) { // Очистить экран glClear(GL_COLOR_BUFFER_BIT); // Нарисовать белый полигон (квадрат) с углами // в (0.25, 0.25, 0.0) и (0.75, 0.75, 0.0) glColor3f(1.0, 1.0, 1.0); glBegin(GL_POLYGON); glVertex3f(0.25, 0.25, 0.0); glVertex3f(0.75, 0.25, 0.0); glVertex3f(0.75, 0.75, 0.0); glVertex3f(0.25, 0.75, 0.0); glEnd(); glFlush(); } // Установить начальные характеристики окна, открыть окно с заголовком //«hello». Зарегистрировать дисплейную функцию обратного вызова // Войти в главный цикл int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(“hello”); init(); glutDisplayFunc(display); glutMainLoop(); return 0; } Цветовая модель ‒ модель описания цвета в виде набора чисел (обычно из трех или четырех значений, называемых цветовыми компонентами или цветовыми координатами). Цветовые модели подразделяются на аддитивные и субтрактивные.