-
Notifications
You must be signed in to change notification settings - Fork 1
/
ray.cpp
88 lines (73 loc) · 1.12 KB
/
ray.cpp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "ray.h"
#define NULL 0
Ray::Ray()
: origin(0.0f, 0.0f, 0.0f),
direction(),
tMax(RAY_T_MAX)
{
invalid = false;
}
Ray::Ray(const Ray& r)
: origin(r.origin),
direction(r.direction),
tMax(r.tMax)
{
invalid = false;
}
Ray::Ray(const Point& origin, const Vector& direction, float tMax)
: origin(origin),
direction(direction),
tMax(tMax)
{
invalid = false;
}
Ray::~Ray()
{
}
Ray& Ray::operator =(const Ray& r)
{
origin = r.origin;
direction = r.direction;
tMax = r.tMax;
return *this;
}
Point Ray::calculate(float t) const
{
return origin + direction * t;
}
Intersection::Intersection()
: ray(),
t(RAY_T_MAX),
pShape(NULL)
{
}
Intersection::Intersection(const Intersection& i)
: ray(i.ray),
t(i.t),
pShape(i.pShape)
{
}
Intersection::Intersection(const Ray& ray)
: ray(ray),
t(ray.tMax),
pShape(NULL)
{
}
Intersection::~Intersection()
{
}
Intersection& Intersection::operator =(const Intersection& i)
{
ray = i.ray;
t = i.t;
pShape = i.pShape;
return *this;
}
bool Intersection::intersected() const
{
return (pShape != NULL);
}
Point Intersection::position() const
{
return ray.calculate(t);
}