-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathAccelerationStructure.cpp
More file actions
57 lines (45 loc) · 1.47 KB
/
AccelerationStructure.cpp
File metadata and controls
57 lines (45 loc) · 1.47 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "AccelerationStructure.h"
#include <fstream>
const double PI = 3.14;
const double epsilon = 0.001;
const double inf = std::numeric_limits<double>::infinity();
std::atomic<int> check{0};
std::atomic<int> hit{0};
AccelerationStructure::AccelerationStructure() {}
AccelerationStructure::~AccelerationStructure() {}
BruteForce::BruteForce(Scene* _scene): scene(_scene) {}
Primitive* BruteForce::search(const Ray& r, IntersectionData& id) {
double min_dist = std::numeric_limits<double>::infinity(), dist;
Primitive* clst_obj = nullptr;
check++;
for(Primitive* obj : scene->primitives) {
dist = obj->intersection_distance(r);
if(dist>0&&dist<min_dist) {
min_dist = dist;
clst_obj = obj;
}
if(dist>0&&dist<inf){
hit++;
}
}
if(clst_obj) {
id.point = clst_obj->intersection_point(r);
id.normal = clst_obj->normal(id.point);
id.distance = min_dist;
return clst_obj;
} else {
id.point = Vector3d::Identity();
id.normal = Vector3d::Identity();
id.distance = min_dist;
return clst_obj;
}
}
std::pair<int, int> BruteForce::info() {
return std::make_pair(int(check), int(hit));
}
BruteForce::~BruteForce() {}
KDTree::KDTree(Scene* _scene): scene(_scene) {}
Primitive* KDTree::search(const Ray& r, IntersectionData& id) {
return nullptr;
}
KDTree::~KDTree() {}