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.
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)