-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhittableList.h
More file actions
39 lines (28 loc) · 875 Bytes
/
Copy pathhittableList.h
File metadata and controls
39 lines (28 loc) · 875 Bytes
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
#ifndef HITTABLE_LIST_H
#define HITTABLE_LIST_H
#include "hittable.h"
#include <vector>
class HittableList : public hittable {
public:
std::vector<shared_ptr<hittable>> objects;
HittableList() {}
HittableList(shared_ptr<hittable> object) { add(object); }
void clear() { objects.clear(); }
void add(shared_ptr<hittable> object) {
objects.push_back(object);
}
bool hit(const ray& r, interval rayT, hitRecord& rec) const override {
hitRecord tempRec;
bool hitAnything = false;
auto closestSoFar = rayT.max;
for (const auto& object : objects) {
if (object->hit(r, interval(rayT.min, closestSoFar), tempRec)) {
hitAnything = true;
closestSoFar = tempRec.t;
rec = tempRec;
}
}
return hitAnything;
}
};
#endif