From 5f3f1e8096a4c5a0ca51e34df10fc136633e6f55 Mon Sep 17 00:00:00 2001 From: Xiaodong Liu Date: Sun, 1 Mar 2026 15:34:46 +0800 Subject: [PATCH] Simplify box() face construction Resolves #1733 --- CHANGELOG.md | 2 ++ books/RayTracingTheNextWeek.html | 12 ++++++------ books/acknowledgments.md.html | 1 + src/TheNextWeek/quad.h | 12 ++++++------ src/TheRestOfYourLife/quad.h | 12 ++++++------ 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30ec8338..a269bc80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ Change Log / Ray Tracing in One Weekend ### The Next Week - Fix -- Remove premature source line for call to `get_sphere_uv` (#1701) + - Change -- Simplify `box()` face construction to use `min` and `max` points directly + without recombining coordinates (#1733) ### The Rest of Your Life diff --git a/books/RayTracingTheNextWeek.html b/books/RayTracingTheNextWeek.html index 47e49334..4131f0df 100644 --- a/books/RayTracingTheNextWeek.html +++ b/books/RayTracingTheNextWeek.html @@ -3520,12 +3520,12 @@ auto dy = vec3(0, max.y() - min.y(), 0); auto dz = vec3(0, 0, max.z() - min.z()); - sides->add(make_shared(point3(min.x(), min.y(), max.z()), dx, dy, mat)); // front - sides->add(make_shared(point3(max.x(), min.y(), max.z()), -dz, dy, mat)); // right - sides->add(make_shared(point3(max.x(), min.y(), min.z()), -dx, dy, mat)); // back - sides->add(make_shared(point3(min.x(), min.y(), min.z()), dz, dy, mat)); // left - sides->add(make_shared(point3(min.x(), max.y(), max.z()), dx, -dz, mat)); // top - sides->add(make_shared(point3(min.x(), min.y(), min.z()), dx, dz, mat)); // bottom + sides->add(make_shared(min, dy, dx, mat)); // back + sides->add(make_shared(min, dx, dz, mat)); // bottom + sides->add(make_shared(min, dz, dy, mat)); // left + sides->add(make_shared(max, -dx, -dy, mat)); // front + sides->add(make_shared(max, -dz, -dx, mat)); // top + sides->add(make_shared(max, -dy, -dz, mat)); // right return sides; } diff --git a/books/acknowledgments.md.html b/books/acknowledgments.md.html index bd7c518c..26ab479b 100644 --- a/books/acknowledgments.md.html +++ b/books/acknowledgments.md.html @@ -72,6 +72,7 @@ - [Thien Tran](https://github.com/gau-nernst) - Vahan Sosoyan - [WANG Lei](https://github.com/wlbksy) + - [Xiaodong Liu](https://github.com/xiaodoliu) - [Yann Herklotz](https://github.com/ymherklotz) - [ZeHao Chen](https://github.com/oxine) diff --git a/src/TheNextWeek/quad.h b/src/TheNextWeek/quad.h index 8d5c9c93..f995ded8 100644 --- a/src/TheNextWeek/quad.h +++ b/src/TheNextWeek/quad.h @@ -103,12 +103,12 @@ inline shared_ptr box(const point3& a, const point3& b, shared_pt auto dy = vec3(0, max.y() - min.y(), 0); auto dz = vec3(0, 0, max.z() - min.z()); - sides->add(make_shared(point3(min.x(), min.y(), max.z()), dx, dy, mat)); // front - sides->add(make_shared(point3(max.x(), min.y(), max.z()), -dz, dy, mat)); // right - sides->add(make_shared(point3(max.x(), min.y(), min.z()), -dx, dy, mat)); // back - sides->add(make_shared(point3(min.x(), min.y(), min.z()), dz, dy, mat)); // left - sides->add(make_shared(point3(min.x(), max.y(), max.z()), dx, -dz, mat)); // top - sides->add(make_shared(point3(min.x(), min.y(), min.z()), dx, dz, mat)); // bottom + sides->add(make_shared(min, dy, dx, mat)); // back + sides->add(make_shared(min, dx, dz, mat)); // bottom + sides->add(make_shared(min, dz, dy, mat)); // left + sides->add(make_shared(max, -dx, -dy, mat)); // front + sides->add(make_shared(max, -dz, -dx, mat)); // top + sides->add(make_shared(max, -dy, -dz, mat)); // right return sides; } diff --git a/src/TheRestOfYourLife/quad.h b/src/TheRestOfYourLife/quad.h index 6cae0974..46c8d2ac 100644 --- a/src/TheRestOfYourLife/quad.h +++ b/src/TheRestOfYourLife/quad.h @@ -122,12 +122,12 @@ inline shared_ptr box(const point3& a, const point3& b, shared_pt auto dy = vec3(0, max.y() - min.y(), 0); auto dz = vec3(0, 0, max.z() - min.z()); - sides->add(make_shared(point3(min.x(), min.y(), max.z()), dx, dy, mat)); // front - sides->add(make_shared(point3(max.x(), min.y(), max.z()), -dz, dy, mat)); // right - sides->add(make_shared(point3(max.x(), min.y(), min.z()), -dx, dy, mat)); // back - sides->add(make_shared(point3(min.x(), min.y(), min.z()), dz, dy, mat)); // left - sides->add(make_shared(point3(min.x(), max.y(), max.z()), dx, -dz, mat)); // top - sides->add(make_shared(point3(min.x(), min.y(), min.z()), dx, dz, mat)); // bottom + sides->add(make_shared(min, dy, dx, mat)); // back + sides->add(make_shared(min, dx, dz, mat)); // bottom + sides->add(make_shared(min, dz, dy, mat)); // left + sides->add(make_shared(max, -dx, -dy, mat)); // front + sides->add(make_shared(max, -dz, -dx, mat)); // top + sides->add(make_shared(max, -dy, -dz, mat)); // right return sides; }