Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторные работы №6–9

Оглавление


Лабораторная работа №6. Аффинные преобразования в пространстве. Проецирование

Классы программы

1. Точка (Point)

  • Представляет точку в трёхмерном пространстве
  • Содержит координаты x, y, z

2. Многоугольник (Грань, Face)

  • Состоит из набора точек (вершин)
  • Определяет плоскую грань многогранника

3. Многогранник (Polyhedron)

  • Состоит из набора граней
  • Реализует методы для аффинных преобразований

Функциональные требования

1. Отображение правильных многогранников

  • Тетраэдр
  • Гексаэдр (куб)
  • Октаэдр
  • Икосаэдр*
  • Додекаэдр*

2. Аффинные преобразования (реализованные матрицами)

  • Смещение — с указанием параметров сдвига по осям
  • Поворот — с указанием углов вращения
  • Масштаб — с указанием коэффициентов масштабирования

3. Специальные преобразования

  • Отражение относительно выбранной координатной плоскости
  • Масштабирование многогранника относительно своего центра
  • Вращение вокруг прямой, проходящей через центр многогранника, параллельно выбранной координатной оси
  • Поворот вокруг произвольной прямой (заданной двумя точками) на заданный угол

4. Системы проекций

  • Перспективная проекция
  • Аксонометрическая проекция
  • Возможность переключения между проекциями

Технические требования

  • Все преобразования реализованы с использованием матриц
  • Программа обеспечивает интерактивное управление параметрами преобразований

Лабораторная работа №7. Построение трёхмерных моделей

1. Загрузка и сохранение модели многогранника из файла

  • Формат файла — Wavefront OBJ

  • Пример файла приведён в приложениях

  • Необходимо реализовать:

    • Загрузку модели из OBJ-файла
    • Отображение загруженной модели
    • Возможность применения к ней аффинных преобразований
  • Для тестирования можно использовать модели многогранников из Лабораторной №6

2. Построение фигуры вращения

  • Фигура вращения задаётся:

    • Образующей (набор точек)
    • Осью вращения
    • Количеством разбиений (угол вращения = 360° / количество разбиений)
  • Программа должна:

    • Позволять задать образующую
    • Построить фигуру вращения относительно выбранной координатной оси
    • Учитывать заданное количество разбиений
    • Содержать данные о гранях в формате модели
    • Отображать модель и позволять применять к ней аффинные преобразования
    • Сохранение и загрузка модели — необязательная реализация за бонусные баллы

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

  • Сегмент поверхности задаётся функцией f(x, y) = z

  • Параметры:

    • Диапазоны отсечения [x0, x1], [y0, y1]
    • Количество разбиений по осям (шаг)
  • Программа должна:

    • Позволять строить сегмент поверхности по выбранной функции
    • Отображать модель и позволять применять аффинные преобразования
    • Сохранение и загрузка модели — необязательная реализация за бонусные баллы

Лабораторная работа №8. Удаление невидимых линий и граней

4. Отсечение нелицевых граней

  • Реализовать вращающийся объект с отсечением нелицевых граней

  • Для каждой грани вычисляется вектор нормали, направленный наружу

    • Нормаль вычисляется как векторное произведение двух векторов, лежащих в плоскости грани
  • Задать вектор обзора

    • Можно использовать только параллельную проекцию
    • Бонус: возможность переключения между параллельной и перспективной проекцией
  • Реализовать отсечение граней на основе вектора нормали и направления обзора

  • Для тестирования можно использовать модели куба и шара

5. Алгоритм Z-буфера

  • Реализовать алгоритм Z-буфера для удаления невидимых граней
  • Направление обзора может быть фиксированным
  • Бонус: возможность переключения между типами проекций
  • Добавить возможность применения преобразований к отображаемому объекту
  • Если объект выпуклый — добавить несколько объектов для проверки корректной работы при перекрытии

6. Камера

  • Добавить объект камера

    • Определяется положением, направлением обзора и матрицей проекционного преобразования
  • Получить изображение с камеры при вращении вокруг статического объекта


Лабораторная работа №9. Освещение и текстурирование

7. Освещение и затенение

7.1 Модель освещения

  • Реализовать модели освещения для затенения фигур (с учётом удаления нелицевых граней)

  • Вычислить нормаль к каждой вершине

    • Или использовать нормали из OBJ-файла при загрузке модели
  • Добавить:

    • Источник света
    • Цвет объекта
    • Возможность применения аффинных преобразований

7.2 Шейдинг Гуро

  • Вычислить цвет в каждой вершине по модели Ламберта (диффузное отражение)
  • Закрасить грань методом Гуро, интерполируя цвета вершин методом билинейной интерполяции

7.3 Шейдинг Фонга

  • Интерполировать нормали между вершинами с последующей нормализацией
  • Вычислять цвет в каждой точке по модели туншейдинга с использованием интерполированных нормалей

8. Текстурирование

  • Реализовать наложение текстуры на полигоны
  • Добавить координаты текстуры к каждой вершине
  • При отрисовке грани интерполировать координаты текстуры между вершинами
  • Продемонстрировать текстурирование на правильных многогранниках (тетраэдр, куб, октаэдр)
  • Добавить возможность применения преобразований к текстурированному объекту

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages