Advertisement
kachamaka

Untitled

Mar 2nd, 2022
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1. В това финално домашно ще трябва да имплементирате структура за ускорение на пресичане на лъчи.
  2.  
  3. Кода може да намерите тук: https://github.com/poseidon4o/urban-spork/tree/algo-homework
  4. Може да направите форк на репо-то или да го свалите като зип и да работите така.
  5.  
  6. В дадения код ще намерите имплементиран минимален raytracer, който поддържа сфери, триъгълни мрежи и два вида материали. Има конфигурирани 4 различни сцени с нарастваща комплексност. Има базова и не оптимална имплементация на осмично дърво (OctTree) с цел ускорение на пресичането на лъчите. Вашата задача е да имплементирате друга по-бърза структура за пресичане, KDTree, BVHTree или друга.
  7.  
  8. Структура на кода:
  9. Accelerators.cpp: кода на осмичното дърво и файла, в който може да попълните имплементация на избраната от вас структура за ускорение. Би трябвало да е достатъчно да добавяте код само в този файл, но не е ограничение.
  10. Mesh.cpp: код за зареждане и пресичане на триъгълни мрежи
  11. Materia.cpp: код за материалите
  12. Primitive.cpp: клас за сферата и класа, който се ползва за инстанциране на примитиви
  13. Utils.hpp: клас за вектор, ограждащ обем и математически функции
  14. Image.hpp: класове за работа с изображения
  15. main.cpp: код за създаване на сцена и трасиране на лъчите
  16.  
  17. Сцената се описва в клас Scene който се инициализира с параметри за крайното изображение, камерата и обектите в него. Всеки обект е наследник на класа Primitive и Intersectable, които дефинират нужните методи за да може обектът да бъде трасиран и да може да се слага в ускорителни структури. За всеки Primitive ще бъде извикан метода onBeforeRender преди да започне трасирането. В този метод се създават ускорителните структури като кода се изпълнява само от една нишка. След приключване на метода започва трасиране на много нишки.
  18.  
  19. Би трябвало базовият клас за ускорителната структура да има достатъчен интерфейс, но може да променяте каквото искате от целия код. Възможно е да има бъгове, ако намерите или се съмнявате за част от кода - пишете.
  20.  
  21. Програмата по подразбиране трасира най-простата сцена, но с аргумент може да се избере дали да се трасира някоя определена (0-3) или всичките (-1). Трасирането става на много нишки.
  22.  
  23. Проекта е описан в CMakeLists.txt, който може да се използва да генерира Visual Studio, Makefile или друго което ползвате.
  24.  
  25.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement