Skip to content

Commit 3605ee5

Browse files
committed
Add new quads scene plus render
Also renumbers all render images.
1 parent ae99e5b commit 3605ee5

10 files changed

+106
-27
lines changed

books/RayTracingTheNextWeek.html

Lines changed: 72 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2756,9 +2756,57 @@
27562756
#endif
27572757
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27582758
[Listing [quad-final]: <kbd>[quad.h]</kbd> Final quad class]
2759-
</div>
27602759

2760+
And now we add a new scene to demonstrate our new `quad` primitive:
2761+
2762+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
2763+
void quads(scene& scene_desc) {
2764+
scene_desc.image_width = 400;
2765+
scene_desc.aspect_ratio = 1.0;
2766+
scene_desc.samples_per_pixel = 100;
2767+
2768+
scene_desc.cam.aperture = 0.0;
2769+
scene_desc.cam.vfov = 80.0;
2770+
scene_desc.cam.lookfrom = point3(0,0,9);
2771+
scene_desc.cam.lookat = point3(0,0,0);
27612772

2773+
hittable_list& world = scene_desc.world;
2774+
2775+
// Materials
2776+
auto left_red = make_shared<lambertian>(color(1,.2,.2));
2777+
auto back_green = make_shared<lambertian>(color(.2,1,.2));
2778+
auto right_blue = make_shared<lambertian>(color(.2,.2,1));
2779+
auto upper_orange = make_shared<lambertian>(color(1,.5,0));
2780+
auto lower_teal = make_shared<lambertian>(color(.2,.8,.8));
2781+
2782+
// Quads
2783+
world.add(make_shared<quad>(point3(-3,-2,5), vec3(0,0,-4), vec3(0,4,0), left_red));
2784+
world.add(make_shared<quad>(point3(-2,-2,0), vec3(4,0,0), vec3(0,4,0), back_green));
2785+
world.add(make_shared<quad>(point3(3,-2,1), vec3(0,0,4), vec3(0,4,0), right_blue));
2786+
world.add(make_shared<quad>(point3(-2,3,1), vec3(4,0,0), vec3(0,0,4), upper_orange));
2787+
world.add(make_shared<quad>(point3(-2,-3,5), vec3(4,0,0), vec3(0,0,-4), lower_teal));
2788+
}
2789+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
2790+
2791+
int main() {
2792+
...
2793+
switch (0) {
2794+
case 1: random_spheres(scene_desc); break;
2795+
case 2: two_spheres(scene_desc); break;
2796+
case 3: earth(scene_desc); break;
2797+
case 4: two_perlin_spheres(scene_desc); break;
2798+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
2799+
default:
2800+
case 5: quads(scene_desc); break;
2801+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
2802+
}
2803+
2804+
scene_desc.render();
2805+
}
2806+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2807+
[Listing [quad-scene]: <kbd>[main.cc]</kbd> A new scene with quads]
2808+
2809+
![Image 16: Quads](../images/img-2.16-quads.png class=pixel)
27622810

27632811

27642812
Lights
@@ -2935,9 +2983,10 @@
29352983
case 2: two_spheres(scene_desc); break;
29362984
case 3: earth(scene_desc); break;
29372985
case 4: two_perlin_spheres(scene_desc); break;
2986+
case 5: quads(scene_desc); break;
29382987
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
29392988
default:
2940-
case 5: simple_light(scene_desc); break;
2989+
case 6: simple_light(scene_desc); break;
29412990
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
29422991
}
29432992

@@ -2950,7 +2999,7 @@
29502999
<div class='together'>
29513000
We get:
29523001

2953-
![Image 16: Scene with rectangle light source](../images/img-2.16-rect-light.png class=pixel)
3002+
![Image 17: Scene with rectangle light source](../images/img-2.17-rect-light.png class=pixel)
29543003

29553004
</div>
29563005

@@ -2970,8 +3019,8 @@
29703019
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29713020
[Listing [rect-light]: <kbd>[main.cc]</kbd> A simple rectangle light plus illuminating ball]
29723021

2973-
![Image 17: Scene with rectangle and sphere light sources
2974-
](../images/img-2.17-rect-sphere-light.png class=pixel)
3022+
![Image 18: Scene with rectangle and sphere light sources
3023+
](../images/img-2.18-rect-sphere-light.png class=pixel)
29753024

29763025

29773026
Creating an Empty “Cornell Box”
@@ -3014,10 +3063,11 @@
30143063
case 2: two_spheres(scene_desc); break;
30153064
case 3: earth(scene_desc); break;
30163065
case 4: two_perlin_spheres(scene_desc); break;
3017-
case 5: simple_light(scene_desc); break;
3066+
case 5: quads(scene_desc); break;
3067+
case 6: simple_light(scene_desc); break;
30183068
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
30193069
default:
3020-
case 6: cornell_box(scene_desc); break;
3070+
case 7: cornell_box(scene_desc); break;
30213071
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
30223072
}
30233073

@@ -3030,7 +3080,7 @@
30303080
<div class='together'>
30313081
We get:
30323082

3033-
![Image 18: Empty Cornell box](../images/img-2.18-cornell-empty.png class=pixel)
3083+
![Image 19: Empty Cornell box](../images/img-2.19-cornell-empty.png class=pixel)
30343084

30353085
This image is very noisy because the light is small.
30363086
</div>
@@ -3099,7 +3149,7 @@
30993149
<div class='together'>
31003150
This gives:
31013151

3102-
![Image 19: Cornell box with two blocks](../images/img-2.19-cornell-blocks.png class=pixel)
3152+
![Image 20: Cornell box with two blocks](../images/img-2.20-cornell-blocks.png class=pixel)
31033153

31043154
</div>
31053155

@@ -3445,7 +3495,7 @@
34453495
<div class='together'>
34463496
Which yields:
34473497

3448-
![Image 20: Standard Cornell box scene](../images/img-2.20-cornell-standard.png class=pixel)
3498+
![Image 21: Standard Cornell box scene](../images/img-2.21-cornell-standard.png class=pixel)
34493499

34503500
</div>
34513501

@@ -3654,11 +3704,12 @@
36543704
case 2: two_spheres(scene_desc); break;
36553705
case 3: earth(scene_desc); break;
36563706
case 4: two_perlin_spheres(scene_desc); break;
3657-
case 5: simple_light(scene_desc); break;
3658-
case 6: cornell_box(scene_desc); break;
3707+
case 5: quads(scene_desc); break;
3708+
case 6: simple_light(scene_desc); break;
3709+
case 7: cornell_box(scene_desc); break;
36593710
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
36603711
default:
3661-
case 7: cornell_smoke(scene_desc); break;
3712+
case 8: cornell_smoke(scene_desc); break;
36623713
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
36633714
}
36643715

@@ -3671,7 +3722,7 @@
36713722
<div class='together'>
36723723
We get:
36733724

3674-
![Image 21: Cornell box with blocks of smoke](../images/img-2.21-cornell-smoke.png class=pixel)
3725+
![Image 22: Cornell box with blocks of smoke](../images/img-2.22-cornell-smoke.png class=pixel)
36753726

36763727
</div>
36773728

@@ -3779,13 +3830,13 @@
37793830
case 2: two_spheres(scene_desc); break;
37803831
case 3: earth(scene_desc); break;
37813832
case 4: two_perlin_spheres(scene_desc); break;
3782-
case 5: simple_light(scene_desc); break;
3783-
case 6: cornell_box(scene_desc); break;
3784-
case 7: cornell_smoke(scene_desc); break;
3833+
case 5: quads(scene_desc); break;
3834+
case 6: simple_light(scene_desc); break;
3835+
case 7: cornell_box(scene_desc); break;
3836+
case 8: cornell_smoke(scene_desc); break;
37853837
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
3786-
case 8: final_scene(scene_desc); break;
3787-
default:
3788-
case 9: default_scene(scene_desc); break;
3838+
case 9: final_scene(scene_desc); break;
3839+
default: default_scene(scene_desc); break;
37893840
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
37903841
}
37913842

@@ -3797,7 +3848,7 @@
37973848
<div class='together'>
37983849
Running it with 10,000 rays per pixel (sweet dreams) yields:
37993850

3800-
![Image 22: Final scene](../images/img-2.22-book2-final.jpg)
3851+
![Image 23: Final scene](../images/img-2.23-book2-final.jpg)
38013852

38023853
</div>
38033854

images/img-2.16-quads.png

133 KB
Loading
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/TheNextWeek/main.cc

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,34 @@ void earth(scene& scene_desc) {
139139
}
140140

141141

142+
void quads(scene& scene_desc) {
143+
scene_desc.image_width = 400;
144+
scene_desc.aspect_ratio = 1.0;
145+
scene_desc.samples_per_pixel = 100;
146+
147+
scene_desc.cam.aperture = 0.0;
148+
scene_desc.cam.vfov = 80.0;
149+
scene_desc.cam.lookfrom = point3(0,0,9);
150+
scene_desc.cam.lookat = point3(0,0,0);
151+
152+
hittable_list& world = scene_desc.world;
153+
154+
// Materials
155+
auto left_red = make_shared<lambertian>(color(1,.2,.2));
156+
auto back_green = make_shared<lambertian>(color(.2,1,.2));
157+
auto right_blue = make_shared<lambertian>(color(.2,.2,1));
158+
auto upper_orange = make_shared<lambertian>(color(1,.5,0));
159+
auto lower_teal = make_shared<lambertian>(color(.2,.8,.8));
160+
161+
// Quads
162+
world.add(make_shared<quad>(point3(-3,-2,5), vec3(0,0,-4), vec3(0,4,0), left_red));
163+
world.add(make_shared<quad>(point3(-2,-2,0), vec3(4,0,0), vec3(0,4,0), back_green));
164+
world.add(make_shared<quad>(point3(3,-2,1), vec3(0,0,4), vec3(0,4,0), right_blue));
165+
world.add(make_shared<quad>(point3(-2,3,1), vec3(4,0,0), vec3(0,0,4), upper_orange));
166+
world.add(make_shared<quad>(point3(-2,-3,5), vec3(4,0,0), vec3(0,0,-4), lower_teal));
167+
}
168+
169+
142170
void simple_light(scene& scene_desc) {
143171
scene_desc.image_width = 400;
144172
scene_desc.aspect_ratio = 16.0 / 9.0;
@@ -330,12 +358,12 @@ int main() {
330358
case 2: two_spheres(scene_desc); break;
331359
case 3: earth(scene_desc); break;
332360
case 4: two_perlin_spheres(scene_desc); break;
333-
case 5: simple_light(scene_desc); break;
334-
case 6: cornell_box(scene_desc); break;
335-
case 7: cornell_smoke(scene_desc); break;
336-
case 8: final_scene(scene_desc); break;
337-
default:
338-
case 9: default_scene(scene_desc); break;
361+
case 5: quads(scene_desc); break;
362+
case 6: simple_light(scene_desc); break;
363+
case 7: cornell_box(scene_desc); break;
364+
case 8: cornell_smoke(scene_desc); break;
365+
case 9: final_scene(scene_desc); break;
366+
default: default_scene(scene_desc); break;
339367
}
340368

341369
scene_desc.render();

0 commit comments

Comments
 (0)