-
Notifications
You must be signed in to change notification settings - Fork 0
LedKast/simple-3D-renderer
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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 0
No packages published