- Лабораторная работа №6. Аффинные преобразования в пространстве. Проецирование
- Лабораторная работа №7. Построение трёхмерных моделей
- Лабораторная работа №8. Удаление невидимых линий и граней
- Лабораторная работа №9. Освещение и текстурирование
- Представляет точку в трёхмерном пространстве
- Содержит координаты
x,y,z
- Состоит из набора точек (вершин)
- Определяет плоскую грань многогранника
- Состоит из набора граней
- Реализует методы для аффинных преобразований
- Тетраэдр
- Гексаэдр (куб)
- Октаэдр
- Икосаэдр*
- Додекаэдр*
- Смещение — с указанием параметров сдвига по осям
- Поворот — с указанием углов вращения
- Масштаб — с указанием коэффициентов масштабирования
- Отражение относительно выбранной координатной плоскости
- Масштабирование многогранника относительно своего центра
- Вращение вокруг прямой, проходящей через центр многогранника, параллельно выбранной координатной оси
- Поворот вокруг произвольной прямой (заданной двумя точками) на заданный угол
- Перспективная проекция
- Аксонометрическая проекция
- Возможность переключения между проекциями
- Все преобразования реализованы с использованием матриц
- Программа обеспечивает интерактивное управление параметрами преобразований
-
Формат файла — Wavefront OBJ
-
Пример файла приведён в приложениях
-
Необходимо реализовать:
- Загрузку модели из OBJ-файла
- Отображение загруженной модели
- Возможность применения к ней аффинных преобразований
-
Для тестирования можно использовать модели многогранников из Лабораторной №6
-
Фигура вращения задаётся:
- Образующей (набор точек)
- Осью вращения
- Количеством разбиений (угол вращения = 360° / количество разбиений)
-
Программа должна:
- Позволять задать образующую
- Построить фигуру вращения относительно выбранной координатной оси
- Учитывать заданное количество разбиений
- Содержать данные о гранях в формате модели
- Отображать модель и позволять применять к ней аффинные преобразования
- Сохранение и загрузка модели — необязательная реализация за бонусные баллы
-
Сегмент поверхности задаётся функцией
f(x, y) = z -
Параметры:
- Диапазоны отсечения
[x0, x1],[y0, y1] - Количество разбиений по осям (шаг)
- Диапазоны отсечения
-
Программа должна:
- Позволять строить сегмент поверхности по выбранной функции
- Отображать модель и позволять применять аффинные преобразования
- Сохранение и загрузка модели — необязательная реализация за бонусные баллы
-
Реализовать вращающийся объект с отсечением нелицевых граней
-
Для каждой грани вычисляется вектор нормали, направленный наружу
- Нормаль вычисляется как векторное произведение двух векторов, лежащих в плоскости грани
-
Задать вектор обзора
- Можно использовать только параллельную проекцию
- Бонус: возможность переключения между параллельной и перспективной проекцией
-
Реализовать отсечение граней на основе вектора нормали и направления обзора
-
Для тестирования можно использовать модели куба и шара
- Реализовать алгоритм Z-буфера для удаления невидимых граней
- Направление обзора может быть фиксированным
- Бонус: возможность переключения между типами проекций
- Добавить возможность применения преобразований к отображаемому объекту
- Если объект выпуклый — добавить несколько объектов для проверки корректной работы при перекрытии
-
Добавить объект камера
- Определяется положением, направлением обзора и матрицей проекционного преобразования
-
Получить изображение с камеры при вращении вокруг статического объекта
-
Реализовать модели освещения для затенения фигур (с учётом удаления нелицевых граней)
-
Вычислить нормаль к каждой вершине
- Или использовать нормали из OBJ-файла при загрузке модели
-
Добавить:
- Источник света
- Цвет объекта
- Возможность применения аффинных преобразований
- Вычислить цвет в каждой вершине по модели Ламберта (диффузное отражение)
- Закрасить грань методом Гуро, интерполируя цвета вершин методом билинейной интерполяции
- Интерполировать нормали между вершинами с последующей нормализацией
- Вычислять цвет в каждой точке по модели туншейдинга с использованием интерполированных нормалей
- Реализовать наложение текстуры на полигоны
- Добавить координаты текстуры к каждой вершине
- При отрисовке грани интерполировать координаты текстуры между вершинами
- Продемонстрировать текстурирование на правильных многогранниках (тетраэдр, куб, октаэдр)
- Добавить возможность применения преобразований к текстурированному объекту