Ход выполнения работы
Лабораторная работа №4. Построение поверхностей вращения с использованием сплайнов
Цель: научиться строить криволинейные поверхности с помощью полигональных сеток и на базе сплайнов.
Программное обеспечение: OpenGL, MS Visual Studio.
Теория
1. Моделирование поверхностей полигональными сетками. Каркасные аппроксимации гладких объектов [13: стр.350-, стр.385-].
2. Сплайновые представления [9: стр. 594-].
3. Функции OpenGL аппроксимации сплайнами [9: стр. 649-].
Ход выполнения работы
1. Изучить по теоретическим источникам методы моделирования поверхностей полигональными сетками, и сплайновые представления.
2. На языке программирования С++ с использованием библиотеки OpenGL разработать функцию вывода поверхности вращения, полученную поворотом профиля (см. варианты заданий) вокруг оси OZ.
3. С использованием сплайна любого типа аппроксимировать профиль и построить новую поверхность.
4. Реализовать возможность поворота полученной поверхности на произвольный угол.
5. Реализовать возможность визуализации модели в каркасном режиме, так и с помощью сплошной закраски.
6. Дополнительное задание (до +100 баллов): трехмерный ландшафт: для построения поверхности используется карта высот, хранящаяся в виде полутонового bmp-файла. Поверхность изображается как набор клеток со сторонами фиксированного размера, углы которых расположены на разной высоте. На клетки накладывается текстура, имитирующая растительность (поверхность воды, гор и т.д.). Камера перемещается на постоянной высоте над поверхностью. Рельеф поверхности описывается с помощью функции, задающей высоту каждого угла каждой клетки. Эта функция задается с помощью полутонового изображения – карта высоты, каждый пиксел которой соответствует углу одной из клеток поверхности. Значения интенсивности изображения лежат в диапазоне от 0 до 255, и именно эти значения принимаются за значения высоты в углах клеток. Положение камеры задается в системе координат, связанной с картой высоты.
7. По результатам выполнения лабораторной работы оформить отчет, в который включить:
а) титульный лист;
б) индивидуальное задание;
г) блок-схемы реализованных алгоритмов с описанием алгоритма по блок-схеме;
д) результаты тестирования программы (скриншоты с описанием выполняемых функций);
е) описание функций OpenGL, использованных в ходе выполнения лабораторной работы:
Функция glBegin | |
Цель | Отметить начало группы вершин, определяющих один или несколько примитивов |
Включаемый файл | <gl.h> |
Синтаксис | void glBegin(GLenum mode); |
Описание | Применяется вместе с glEnd для разграничения вершин примитива OpenGL |
Параметры | mode – задает создаваемый примитив. Например, GL_POINTS – все заданные вершины используются для создания отдельных точек. |
Что возвращает | Ничего |
к) аналогичное описание разработанных функций в ходе выполнения лабораторной работы;
л) описание материалов, предоставляемых в электронном виде (описание структуры проекта):
Наименование файла и размещение | Описание |
../2d/main.cpp | Основной модуль программы, содержит… |
… | … |
В электронном виде сдается:
а) исходники с подробными комментариями;
б) исполняемый файл со всеми необходимыми библиотеками для корректного запуска в среде Windows.
ВАЖНО! Все рабочие файлы проекта, например, с расширениями .vcproj, .obj, .pdp и т.д. прикладывать не нужно.
Варианты индивидуальных заданий
№ | Профиль поверхности вращения | № | Профиль поверхности вращения | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |
| |