-
Notifications
You must be signed in to change notification settings - Fork 0
/
scene.h
63 lines (55 loc) · 1.75 KB
/
scene.h
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
58
59
60
61
62
63
#pragma once
#include "shape.h"
#include "light.h"
#include "fcolor.h"
#include "ray.h"
struct InterSectionTestResult {
Shape* shape;
InterSectionPoint intersectionPoint;
};
class Scene {
public:
std::vector<Shape*> shapes;
std::vector<LightSource*> lightSources;
FColor ambientIntensity;
InterSectionTestResult testIntersectionWithAll(Ray eye) const
{
InterSectionTestResult result;
InterSectionPoint point;
// 全ての物体に対して交差判定を行う
for (Shape* s : shapes) {
if(s->testIntersection(eye, point)) {
point.distance = (point.position - eye.start).magSg();
// first shape
if (result.intersectionPoint.distance < 0) {
result.shape = s;
result.intersectionPoint = point;
} else {
if (point.distance < result.intersectionPoint.distance) {
result.shape = s;
result.intersectionPoint = point;
}
}
}
}
return result;
}
InterSectionTestResult testIntersectionWithAll(Ray ray, float maxDist) const
{
InterSectionTestResult result;
InterSectionPoint point;
// 影判定
// 全ての物体に対して交差判定を行う
for (Shape* s : shapes) {
if(s->testIntersection(ray, point)) {
point.distance = (point.position - ray.start).magSg();
if (point.distance < maxDist) {
result.shape = s;
result.intersectionPoint = point;
break;
}
}
}
return result;
}
};