Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Основы компьютерной графики

Покупка
Основная коллекция
Артикул: 714334.01.99
Представлены основные примитивы графической библиотеки OpenGL. приведены примеры использования простейших геометрических преобразований, примеры отображения графиков функций и геометрических фракталов, механизмы установки камеры, проекций отображения, алгоритмы наложения текстур и управления освещением сцены. Предназначено для студентов, обучающихся по программе бакалавриата по направлениям подготовки 01.03.01 «Математика». 01.03.02 «Прикладная математика и информатика» и 02.03.01 «Математика и компьютерные науки».
Баранов, С.Н. Основы компьютерной графики : учеб. пособие / С.Н. Баранов, С.Г. Толкач. - Красноярск : Сиб. федер. ун-т, 2018. - 88 с. - ISBN 978-5-7638-3968-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/1032167 (дата обращения: 06.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Министерство науки и высшего образования Российской Федерации

Сибирский федеральный университет

С. Н. Баранов, С. Г. Толкач

Основы компьютерной графики

Учебное пособие

Красноярск

СФУ
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;

}

Цветовая модель ‒ модель описания цвета в виде набора чисел 

(обычно из трех или четырех значений, называемых цветовыми компонентами или цветовыми координатами). Цветовые модели подразделяются на аддитивные и субтрактивные.

В аддитивной цветовой модели задаются три основных цвета, а

любой другой цвет представляется как взвешенная сумма трех основных цветов. Широко известная цветовая модель RGB является аддитивной цветовой моделью (сокращенно от Red, Green, Blue ‒ красный, 
зеленый, синий). 

Другая модель смешения цветов ‒ субтрактивная цветовая мо
дель, или модель CMYK (CMY), использующая в качестве первичных 
составляющих цвета Cyan, Magenta, Yellow (голубой, пурпурный, 
желтый), которые являются дополнительными к Red, Green, Blue. 
Связь между значениями (R, G, B) и (C, M, Y) для одного и того же 
цвета выражается формулой:





















































1
1
1

Y
M
C

B
G
R

.

На рис. 2 демонстрируются примеры получения некоторых цве
тов в указанных цветовых моделях.

Рис. 2. Пример сложения цветов

Функция
glColor3f (GLfloat
red, GLfloat
green, 

GLfloat blue) принимает три параметра, каждый из которых является вещественным числом в диапазоне между 0.0 и 1.0. Эти парамет
ры задают красный, зеленый и синий компоненты цвета соответственно.

Пример 3. Задание разных цветов
glColor3f(0.0,0.0,0.0); черный
glColor3f(1.0,0.0,0.0); красный
glColor3f(0.0,1.0,0.0); зеленый
glColor3f(1.0,1.0,0.0); желтый
glColor3f(0.0,0.0,1.0); синий
glColor3f(1.0,0.0,1.0); фиолетовый
glColor3f(0.0,1.0,1.0); голубой
glColor3f(1.0,1.0,1.0); белый

На рис. 3 приведена схема получения цветов для обеих цветовых 

моделей.

Рис. 3. Схема смешивания цветов для моделей

Любой геометрический объект однозначно описывается в виде 

упорядоченного набора вершин. Для установки одной вершины используется функция glVertex*():

void glVertex{234}{sifd}(TYPE coords);
void glVertex{234}{sifd}v(const TYPE *coords);