Skip to content

Commit aea0901

Browse files
authored
Merge pull request #670 from RayTracing/overrides
Overrides
2 parents af4b833 + 35c1539 commit aea0901

25 files changed

+213
-148
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Change Log -- Ray Tracing in One Weekend
44
# v3.2.0 (in progress)
55

66
### Common
7+
- Bug: Found a bug in book 3 source `isotropic::scatter()` method. Commented out, using default
8+
(as it was previously). (#669)
79
- Delete: vestigial `vec3::write_color()` method (now in color.h)
810
- Change: All images and figures renamed to follow more logical convention, using the following
911
pattern: `{fig,img}-<book>.<sequence>-<title>.<filetype>` (#495)
@@ -13,6 +15,12 @@ Change Log -- Ray Tracing in One Weekend
1315
- New: Added constructors that take `color` arguments in addition to the constructors
1416
taking `shared_ptr<texture>` arguments, simplifying calling code. Applies to `checker_texture`,
1517
`constant_medium`, `diffuse_light`, `lambertian`, and `isotropic` (#516, #644)
18+
- Change: Added `override` keywords throughout. This keyword marks a subclass method as one that
19+
is intended to override a superclass method. It makes the code a bit easier to understand, and
20+
ensures that your function is actually overriding the method you think it is. Which is good,
21+
because it already caught an existing bug in _The Rest of Your Life_ source. This change
22+
includes commenting out the book 3 `isotropic::scatter()` method, which was accidentally ignored
23+
anyway. (#639, #669)
1624

1725
### _In One Weekend_
1826
- Change: Updated all rendered images except for 1.13, 1.14 (#179, #547, #548, #549, #550, #551,

books/RayTracingInOneWeekend.html

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,8 @@
888888
sphere() {}
889889
sphere(point3 cen, double r) : center(cen), radius(r) {};
890890

891-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
891+
virtual bool hit(
892+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
892893

893894
public:
894895
point3 center;
@@ -1086,7 +1087,8 @@
10861087
void clear() { objects.clear(); }
10871088
void add(shared_ptr<hittable> object) { objects.push_back(object); }
10881089

1089-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
1090+
virtual bool hit(
1091+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
10901092

10911093
public:
10921094
std::vector<shared_ptr<hittable>> objects;
@@ -1996,7 +1998,8 @@
19961998
: center(cen), radius(r), mat_ptr(m) {};
19971999
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
19982000

1999-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
2001+
virtual bool hit(
2002+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
20002003

20012004
public:
20022005
point3 center;
@@ -2059,7 +2062,7 @@
20592062

20602063
virtual bool scatter(
20612064
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2062-
) const {
2065+
) const override {
20632066
vec3 scatter_direction = rec.normal + random_unit_vector();
20642067
scattered = ray(rec.p, scatter_direction);
20652068
attenuation = albedo;
@@ -2110,7 +2113,7 @@
21102113

21112114
virtual bool scatter(
21122115
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2113-
) const {
2116+
) const override {
21142117
vec3 reflected = reflect(unit_vector(r_in.direction()), rec.normal);
21152118
scattered = ray(rec.p, reflected);
21162119
attenuation = albedo;
@@ -2257,7 +2260,7 @@
22572260

22582261
virtual bool scatter(
22592262
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2260-
) const {
2263+
) const override {
22612264
vec3 reflected = reflect(unit_vector(r_in.direction()), rec.normal);
22622265
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
22632266
scattered = ray(rec.p, reflected + fuzz*random_in_unit_sphere());
@@ -2395,7 +2398,7 @@
23952398

23962399
virtual bool scatter(
23972400
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2398-
) const {
2401+
) const override {
23992402
attenuation = color(1.0, 1.0, 1.0);
24002403
double etai_over_etat = rec.front_face ? (1.0 / ref_idx) : ref_idx;
24012404

@@ -2505,7 +2508,7 @@
25052508

25062509
virtual bool scatter(
25072510
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2508-
) const {
2511+
) const override {
25092512
attenuation = color(1.0, 1.0, 1.0);
25102513
double etai_over_etat = rec.front_face ? (1.0 / ref_idx) : ref_idx;
25112514

@@ -2580,7 +2583,7 @@
25802583

25812584
virtual bool scatter(
25822585
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2583-
) const {
2586+
) const override {
25842587
attenuation = color(1.0, 1.0, 1.0);
25852588
double etai_over_etat = rec.front_face ? (1.0 / ref_idx) : ref_idx;
25862589

books/RayTracingTheNextWeek.html

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@
193193
: center0(cen0), center1(cen1), time0(t0), time1(t1), radius(r), mat_ptr(m)
194194
{};
195195

196-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
196+
virtual bool hit(
197+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
197198

198199
point3 center(double time) const;
199200

@@ -204,7 +205,7 @@
204205
shared_ptr<material> mat_ptr;
205206
};
206207

207-
point3 moving_sphere::center(double time) const{
208+
point3 moving_sphere::center(double time) const {
208209
return center0 + ((time - time0) / (time1 - time0))*(center1 - center0);
209210
}
210211

@@ -279,7 +280,7 @@
279280

280281
virtual bool scatter(
281282
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
282-
) const {
283+
) const override {
283284
vec3 scatter_direction = rec.normal + random_unit_vector();
284285
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
285286
scattered = ray(rec.p, scatter_direction, r_in.time());
@@ -716,9 +717,12 @@
716717
class sphere : public hittable {
717718
public:
718719
...
719-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
720+
virtual bool hit(
721+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
722+
723+
720724
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
721-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const;
725+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override;
722726
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
723727
...
724728
};
@@ -749,9 +753,12 @@
749753
class moving_sphere : public hittable {
750754
public:
751755
...
752-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
756+
virtual bool hit(
757+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
758+
759+
753760
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
754-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const;
761+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override;
755762
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
756763
...
757764
};
@@ -790,9 +797,12 @@
790797
class hittable_list : public hittable {
791798
public:
792799
...
793-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
800+
virtual bool hit(
801+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
802+
803+
794804
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
795-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const;
805+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override;
796806
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
797807
...
798808
};
@@ -868,8 +878,10 @@
868878
std::vector<shared_ptr<hittable>>& objects,
869879
size_t start, size_t end, double time0, double time1);
870880

871-
virtual bool hit(const ray& r, double tmin, double tmax, hit_record& rec) const;
872-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const;
881+
virtual bool hit(
882+
const ray& r, double tmin, double tmax, hit_record& rec) const override;
883+
884+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override;
873885

874886
public:
875887
shared_ptr<hittable> left;
@@ -1063,7 +1075,7 @@
10631075
solid_color(double red, double green, double blue)
10641076
: solid_color(color(red,green,blue)) {}
10651077

1066-
virtual color value(double u, double v, const vec3& p) const {
1078+
virtual color value(double u, double v, const vec3& p) const override {
10671079
return color_value;
10681080
}
10691081

@@ -1208,7 +1220,7 @@
12081220

12091221
virtual bool scatter(
12101222
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
1211-
) const {
1223+
) const override {
12121224
vec3 scatter_direction = rec.normal + random_unit_vector();
12131225
scattered = ray(rec.p, scatter_direction, r_in.time());
12141226
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
@@ -1245,7 +1257,7 @@
12451257
checker_texture(color c1, color c2)
12461258
: even(make_shared<solid_color>(c1)) , odd(make_shared<solid_color>(c2)) {}
12471259

1248-
virtual color value(double u, double v, const point3& p) const {
1260+
virtual color value(double u, double v, const point3& p) const override {
12491261
auto sines = sin(10*p.x())*sin(10*p.y())*sin(10*p.z());
12501262
if (sines < 0)
12511263
return odd->value(u, v, p);
@@ -1486,7 +1498,7 @@
14861498
public:
14871499
noise_texture() {}
14881500

1489-
virtual color value(double u, double v, const point3& p) const {
1501+
virtual color value(double u, double v, const point3& p) const override {
14901502
return color(1,1,1) * noise.noise(p);
14911503
}
14921504

@@ -1666,7 +1678,7 @@
16661678
noise_texture(double sc) : scale(sc) {}
16671679
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
16681680

1669-
virtual color value(double u, double v, const point3& p) const {
1681+
virtual color value(double u, double v, const point3& p) const override {
16701682
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
16711683
return color(1,1,1) * noise.noise(scale * p);
16721684
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
@@ -1843,7 +1855,7 @@
18431855
noise_texture() {}
18441856
noise_texture(double sc) : scale(sc) {}
18451857

1846-
virtual color value(double u, double v, const point3& p) const {
1858+
virtual color value(double u, double v, const point3& p) const override {
18471859
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
18481860
return color(1,1,1) * 0.5 * (1.0 + noise.noise(scale * p));
18491861
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
@@ -1904,7 +1916,7 @@
19041916
noise_texture() {}
19051917
noise_texture(double sc) : scale(sc) {}
19061918

1907-
virtual color value(double u, double v, const point3& p) const {
1919+
virtual color value(double u, double v, const point3& p) const override {
19081920
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
19091921
return color(1,1,1) * noise.turb(scale * p);
19101922
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
@@ -1941,7 +1953,7 @@
19411953
noise_texture() {}
19421954
noise_texture(double sc) : scale(sc) {}
19431955

1944-
virtual color value(double u, double v, const point3& p) const {
1956+
virtual color value(double u, double v, const point3& p) const override {
19451957
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
19461958
return color(1,1,1) * 0.5 * (1 + sin(scale*p.z() + 10*noise.turb(p)));
19471959
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
@@ -2025,7 +2037,7 @@
20252037
delete data;
20262038
}
20272039

2028-
virtual color value(double u, double v, const vec3& p) const {
2040+
virtual color value(double u, double v, const vec3& p) const override {
20292041
// If we have no texture data, then return solid cyan as a debugging aid.
20302042
if (data == nullptr)
20312043
return color(0,1,1);
@@ -2177,11 +2189,11 @@
21772189

21782190
virtual bool scatter(
21792191
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
2180-
) const {
2192+
) const override {
21812193
return false;
21822194
}
21832195

2184-
virtual color emitted(double u, double v, const point3& p) const {
2196+
virtual color emitted(double u, double v, const point3& p) const override {
21852197
return emit->value(u, v, p);
21862198
}
21872199

@@ -2384,9 +2396,9 @@
23842396
shared_ptr<material> mat)
23852397
: x0(_x0), x1(_x1), y0(_y0), y1(_y1), k(_k), mp(mat) {};
23862398

2387-
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
2399+
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const override;
23882400

2389-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const {
2401+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override {
23902402
// The bounding box must have non-zero width in each dimension, so pad the Z
23912403
// dimension a small amount.
23922404
output_box = aabb(point3(x0,y0, k-0.0001), point3(x1, y1, k+0.0001));
@@ -2526,9 +2538,9 @@
25262538
shared_ptr<material> mat)
25272539
: x0(_x0), x1(_x1), z0(_z0), z1(_z1), k(_k), mp(mat) {};
25282540

2529-
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
2541+
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const override;
25302542

2531-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const {
2543+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override {
25322544
// The bounding box must have non-zero width in each dimension, so pad the Y
25332545
// dimension a small amount.
25342546
output_box = aabb(point3(x0,k-0.0001,z0), point3(x1, k+0.0001, z1));
@@ -2548,9 +2560,9 @@
25482560
shared_ptr<material> mat)
25492561
: y0(_y0), y1(_y1), z0(_z0), z1(_z1), k(_k), mp(mat) {};
25502562

2551-
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
2563+
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const override;
25522564

2553-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const {
2565+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override {
25542566
// The bounding box must have non-zero width in each dimension, so pad the X
25552567
// dimension a small amount.
25562568
output_box = aabb(point3(k-0.0001, y0, z0), point3(k+0.0001, y1, z1));
@@ -2705,9 +2717,9 @@
27052717
box() {}
27062718
box(const point3& p0, const point3& p1, shared_ptr<material> ptr);
27072719

2708-
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const;
2720+
virtual bool hit(const ray& r, double t0, double t1, hit_record& rec) const override;
27092721

2710-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const {
2722+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override {
27112723
output_box = aabb(box_min, box_max);
27122724
return true;
27132725
}
@@ -2786,8 +2798,10 @@
27862798
translate(shared_ptr<hittable> p, const vec3& displacement)
27872799
: ptr(p), offset(displacement) {}
27882800

2789-
virtual bool hit(const ray& r, double t_min, double t_max, hit_record& rec) const;
2790-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const;
2801+
virtual bool hit(
2802+
const ray& r, double t_min, double t_max, hit_record& rec) const override;
2803+
2804+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override;
27912805

27922806
public:
27932807
shared_ptr<hittable> ptr;
@@ -2871,8 +2885,10 @@
28712885
public:
28722886
rotate_y(shared_ptr<hittable> p, double angle);
28732887

2874-
virtual bool hit(const ray& r, double t_min, double t_max, hit_record& rec) const;
2875-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const {
2888+
virtual bool hit(
2889+
const ray& r, double t_min, double t_max, hit_record& rec) const override;
2890+
2891+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override {
28762892
output_box = bbox;
28772893
return hasbox;
28782894
}
@@ -3048,9 +3064,10 @@
30483064
phase_function(make_shared<isotropic>(c))
30493065
{}
30503066

3051-
virtual bool hit(const ray& r, double t_min, double t_max, hit_record& rec) const;
3067+
virtual bool hit(
3068+
const ray& r, double t_min, double t_max, hit_record& rec) const override;
30523069

3053-
virtual bool bounding_box(double t0, double t1, aabb& output_box) const {
3070+
virtual bool bounding_box(double t0, double t1, aabb& output_box) const override {
30543071
return boundary->bounding_box(t0, t1, output_box);
30553072
}
30563073

@@ -3076,7 +3093,7 @@
30763093

30773094
virtual bool scatter(
30783095
const ray& r_in, const hit_record& rec, color& attenuation, ray& scattered
3079-
) const {
3096+
) const override {
30803097
scattered = ray(rec.p, random_in_unit_sphere(), r_in.time());
30813098
attenuation = albedo->value(rec.u, rec.v, rec.p);
30823099
return true;

0 commit comments

Comments
 (0)