Skip to content

Commit 168d1a8

Browse files
committed
Refactor restLife/aarect.h
1 parent b3bcf6f commit 168d1a8

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

books/RayTracingTheRestOfYourLife.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1599,14 +1599,14 @@
15991599
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
16001600
virtual double pdf_value(const vec3& origin, const vec3& v) const {
16011601
hit_record rec;
1602-
if (this->hit(ray(origin, v), 0.001, infinity, rec)) {
1603-
auto area = (x1-x0)*(z1-z0);
1604-
auto distance_squared = rec.t * rec.t * v.length_squared();
1605-
auto cosine = fabs(dot(v, rec.normal) / v.length());
1606-
return distance_squared / (cosine * area);
1607-
}
1608-
else
1602+
if (!this->hit(ray(origin, v), 0.001, infinity, rec))
16091603
return 0;
1604+
1605+
auto area = (x1-x0)*(z1-z0);
1606+
auto distance_squared = rec.t * rec.t * v.length_squared();
1607+
auto cosine = fabs(dot(v, rec.normal) / v.length());
1608+
1609+
return distance_squared / (cosine * area);
16101610
}
16111611

16121612
virtual vec3 random(const vec3& origin) const {

src/TheRestOfYourLife/aarect.h

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ class xy_rect: public hittable {
2020
xy_rect() {}
2121

2222
xy_rect(
23-
double _x0, double _x1, double _y0, double _y1, double _k, shared_ptr<material> mat)
24-
: x0(_x0), x1(_x1), y0(_y0), y1(_y1), k(_k), mp(mat) {};
23+
double _x0, double _x1, double _y0, double _y1, double _k, shared_ptr<material> mat
24+
) : x0(_x0), x1(_x1), y0(_y0), y1(_y1), k(_k), mp(mat) {};
2525

2626
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
2727

@@ -40,8 +40,8 @@ class xz_rect: public hittable {
4040
xz_rect() {}
4141

4242
xz_rect(
43-
double _x0, double _x1, double _z0, double _z1, double _k, shared_ptr<material> mat)
44-
: x0(_x0), x1(_x1), z0(_z0), z1(_z1), k(_k), mp(mat) {};
43+
double _x0, double _x1, double _z0, double _z1, double _k, shared_ptr<material> mat
44+
) : x0(_x0), x1(_x1), z0(_z0), z1(_z1), k(_k), mp(mat) {};
4545

4646
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
4747

@@ -52,14 +52,14 @@ class xz_rect: public hittable {
5252

5353
virtual double pdf_value(const vec3& origin, const vec3& v) const {
5454
hit_record rec;
55-
if (this->hit(ray(origin, v), 0.001, infinity, rec)) {
56-
auto area = (x1-x0)*(z1-z0);
57-
auto distance_squared = rec.t * rec.t * v.length_squared();
58-
auto cosine = fabs(dot(v, rec.normal) / v.length());
59-
return distance_squared / (cosine * area);
60-
}
61-
else
55+
if (!this->hit(ray(origin, v), 0.001, infinity, rec))
6256
return 0;
57+
58+
auto area = (x1-x0)*(z1-z0);
59+
auto distance_squared = rec.t * rec.t * v.length_squared();
60+
auto cosine = fabs(dot(v, rec.normal) / v.length());
61+
62+
return distance_squared / (cosine * area);
6363
}
6464

6565
virtual vec3 random(const vec3& origin) const {
@@ -77,8 +77,8 @@ class yz_rect: public hittable {
7777
yz_rect() {}
7878

7979
yz_rect(
80-
double _y0, double _y1, double _z0, double _z1, double _k, shared_ptr<material> mat)
81-
: y0(_y0), y1(_y1), z0(_z0), z1(_z1), k(_k), mp(mat) {};
80+
double _y0, double _y1, double _z0, double _z1, double _k, shared_ptr<material> mat
81+
) : y0(_y0), y1(_y1), z0(_z0), z1(_z1), k(_k), mp(mat) {};
8282

8383
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
8484

@@ -96,53 +96,62 @@ bool xy_rect::hit(const ray& r, double t0, double t1, hit_record& rec) const {
9696
auto t = (k-r.origin().z()) / r.direction().z();
9797
if (t < t0 || t > t1)
9898
return false;
99+
99100
auto x = r.origin().x() + t*r.direction().x();
100101
auto y = r.origin().y() + t*r.direction().y();
101102
if (x < x0 || x > x1 || y < y0 || y > y1)
102103
return false;
104+
103105
rec.u = (x-x0)/(x1-x0);
104106
rec.v = (y-y0)/(y1-y0);
105107
rec.t = t;
106108
vec3 outward_normal = vec3(0, 0, 1);
107109
rec.set_face_normal(r, outward_normal);
108110
rec.mat_ptr = mp;
109111
rec.p = r.at(t);
112+
110113
return true;
111114
}
112115

113116
bool xz_rect::hit(const ray& r, double t0, double t1, hit_record& rec) const {
114117
auto t = (k-r.origin().y()) / r.direction().y();
115118
if (t < t0 || t > t1)
116119
return false;
120+
117121
auto x = r.origin().x() + t*r.direction().x();
118122
auto z = r.origin().z() + t*r.direction().z();
119123
if (x < x0 || x > x1 || z < z0 || z > z1)
120124
return false;
125+
121126
rec.u = (x-x0)/(x1-x0);
122127
rec.v = (z-z0)/(z1-z0);
123128
rec.t = t;
124129
vec3 outward_normal = vec3(0, 1, 0);
125130
rec.set_face_normal(r, outward_normal);
126131
rec.mat_ptr = mp;
127132
rec.p = r.at(t);
133+
128134
return true;
129135
}
130136

131137
bool yz_rect::hit(const ray& r, double t0, double t1, hit_record& rec) const {
132138
auto t = (k-r.origin().x()) / r.direction().x();
133139
if (t < t0 || t > t1)
134140
return false;
141+
135142
auto y = r.origin().y() + t*r.direction().y();
136143
auto z = r.origin().z() + t*r.direction().z();
137144
if (y < y0 || y > y1 || z < z0 || z > z1)
138145
return false;
146+
139147
rec.u = (y-y0)/(y1-y0);
140148
rec.v = (z-z0)/(z1-z0);
141149
rec.t = t;
142150
vec3 outward_normal = vec3(1, 0, 0);
143151
rec.set_face_normal(r, outward_normal);
144152
rec.mat_ptr = mp;
145153
rec.p = r.at(t);
154+
146155
return true;
147156
}
148157

0 commit comments

Comments
 (0)