Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- В това финално домашно ще трябва да имплементирате структура за ускорение на пресичане на лъчи.
- Кода може да намерите тук: https://github.com/poseidon4o/urban-spork/tree/algo-homework
- Може да направите форк на репо-то или да го свалите като зип и да работите така.
- В дадения код ще намерите имплементиран минимален raytracer, който поддържа сфери, триъгълни мрежи и два вида материали. Има конфигурирани 4 различни сцени с нарастваща комплексност. Има базова и не оптимална имплементация на осмично дърво (OctTree) с цел ускорение на пресичането на лъчите. Вашата задача е да имплементирате друга по-бърза структура за пресичане, KDTree, BVHTree или друга.
- Структура на кода:
- Accelerators.cpp: кода на осмичното дърво и файла, в който може да попълните имплементация на избраната от вас структура за ускорение. Би трябвало да е достатъчно да добавяте код само в този файл, но не е ограничение.
- Mesh.cpp: код за зареждане и пресичане на триъгълни мрежи
- Materia.cpp: код за материалите
- Primitive.cpp: клас за сферата и класа, който се ползва за инстанциране на примитиви
- Utils.hpp: клас за вектор, ограждащ обем и математически функции
- Image.hpp: класове за работа с изображения
- main.cpp: код за създаване на сцена и трасиране на лъчите
- Сцената се описва в клас Scene който се инициализира с параметри за крайното изображение, камерата и обектите в него. Всеки обект е наследник на класа Primitive и Intersectable, които дефинират нужните методи за да може обектът да бъде трасиран и да може да се слага в ускорителни структури. За всеки Primitive ще бъде извикан метода onBeforeRender преди да започне трасирането. В този метод се създават ускорителните структури като кода се изпълнява само от една нишка. След приключване на метода започва трасиране на много нишки.
- Би трябвало базовият клас за ускорителната структура да има достатъчен интерфейс, но може да променяте каквото искате от целия код. Възможно е да има бъгове, ако намерите или се съмнявате за част от кода - пишете.
- Програмата по подразбиране трасира най-простата сцена, но с аргумент може да се избере дали да се трасира някоя определена (0-3) или всичките (-1). Трасирането става на много нишки.
- Проекта е описан в CMakeLists.txt, който може да се използва да генерира Visual Studio, Makefile или друго което ползвате.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement