Skip to content

LedKast/simple-3D-renderer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторная работа №3.
Срок выполнения – 29 ноября, 6, 13, 20 декабря 2018.

Реализовать задание, хранение, визуализацию трёхмерной полигональной модели и применение к ней аффинных преобразований.

Этапы выполнения лабораторной работы №3:

	1 этап.
Класс Matrix должен уже быть реализован в лабораторной работе №2.

	2 этап.
Реализация функций модуля AffineTransform, относящихся к трёхмерным аффинным преобразованиям 
(базовые АП будут рассказаны на лекции 3 декабря, составные – 10 декабря).

	3 этап.
Реализация класса Camera3D. Я предлагаю вам унаследовать Camera3D от Camera2D.
В классе Camera3D задать поля Ov, T, N, D и сеттеры для них. Кроме того, в классе хранятся матрицы перехода:
• от мировых координат к видовым (S[w–>v]);
• от видовых координат к проекционным (S[v–>p]);
• от мировых координат к проекционным (S[w–>p] = S[v–>p] • S[w–>v]).
Кроме того, необходимо реализовать метод UpdateCamera(), в котором обновлялись бы перечисленные выше матрицы перехода. 
Вызывать этот метод можно либо из сеттеров для Ov, T, N, D, либо вручную из главного модуля после вызова всех сеттеров.

	4 этап.
Реализация класса Model3D.
Вершины модели хранятся в матрице размера 4 на M (где M – число вершин модели). 
В каждом столбце хранятся однородные координаты соответствующей вершины.
Грани модели хранятся в целочисленной матрице размера L на 3 (где L – число граней) – при этом 
в каждой строке матрицы хранятся номера трёх вершин, образующих грань.
 Рёбра модели определяются программно (для этого вам необходимо описать отдельный метод) по матрице граней и хранятся:
• для нечётных вариантов: в целочисленной матрице размера K на 2 (где K – число рёбер) – при этом 
  в каждой строке матрицы хранятся номера двух вершин, соединённых рёбрами;
• для чётных вариантов: в матрице смежности размера M на M, состоящей из нулей и единиц, – при этом 
  на пересечении i-ой строки и j-ого столбца стоит единица, если i-ая и j-ая вершины соединены ребром.
  Кроме того, необходимо реализовать:
• метод Apply(Matrix AT) применения к модели аффинного преобразования, заданного матрицей AT. 
  В памяти должна храниться исходная матрица вершин модели и накопленное аффинное преобразование;
• метод Project(Matrix P) применения к модели преобразования проецирования, заданного матрицей P.

	5 этап.
Реализация класса Scene3D. В этот класс необходимо добавить в качестве поля трёхмерную модель 
(либо массив трёхмерных моделей), а также метод Render(), осуществляющий отрисовку этой модели (всех имеющихся моделей).

	6 этап.
Реализация применения базовых аффинных преобразований к модели.
Создаются обработчики нажатий на клавиши, вызывающие метод Apply применительно к базовым аффинным преобразованиям.

	7 этап (выполняется в аудитории).
Реализация применения составного аффинного преобразования к модели. 
Какое именно это будет преобразование – узнаете непосредственно перед выполнением.

About

Computer graphic lab 3. 3D engine

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published