-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScene.hpp
More file actions
37 lines (26 loc) · 1.23 KB
/
Scene.hpp
File metadata and controls
37 lines (26 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once
#include "BVH.hpp"
class Medium;
class Scene{
public:
Scene() = default;
Scene(const std::shared_ptr<Medium>& medium) : sceneMedium(medium){}
bool IntersectPred(const Ray& ray, float max = std::numeric_limits<float>::infinity()) const;
bool IntersectTr(Ray ray, SurfaceInteraction& interaction, glm::vec3& Tr, float max = std::numeric_limits<float>::infinity()) const;
bool Intersect(const Ray& ray, SurfaceInteraction& interaction, float max = std::numeric_limits<float>::infinity()) const;
void Add(const std::shared_ptr<Primitive>& ptr);
std::vector<std::shared_ptr<Light>> GetLights() const;
template <typename T>
requires std::is_base_of_v<BVHBase<std::shared_ptr<Primitive>>, T>
void BuildTlas(){
scene_bvh = std::make_shared<T>(primitives);
}
std::shared_ptr<Medium> GetMedium() const;
void SetMedium(const std::shared_ptr<Medium>& medium);
AABB BoundingBox() const;
std::vector<std::shared_ptr<InfiniteLight>> infiniteLights;
private:
std::shared_ptr<BVHBase<std::shared_ptr<Primitive>>> scene_bvh;//std::shared_ptr<BvhBase<std::shared_ptr<Primitive>>
std::vector<std::shared_ptr<Primitive>> primitives;
std::shared_ptr<Medium> sceneMedium;
};