From f226664fe3782b2a366ff354001211425e2f7edb Mon Sep 17 00:00:00 2001 From: Godzil Date: Sun, 23 Feb 2020 02:31:30 +0000 Subject: [PATCH] And cones ! --- README.md | 4 +- output/ch13_cone.png | Bin 0 -> 134527 bytes source/include/cone.h | 33 +++++++ source/shapes/cone.cpp | 124 +++++++++++++++++++++++++ source/tuple.cpp | 5 + tests/CMakeLists.txt | 8 +- tests/ch12_test.cpp | 2 +- tests/ch13_cone.cpp | 204 +++++++++++++++++++++++++++++++++++++++++ tests/cone_test.cpp | 132 ++++++++++++++++++++++++++ 9 files changed, 509 insertions(+), 3 deletions(-) create mode 100644 output/ch13_cone.png create mode 100644 source/include/cone.h create mode 100644 source/shapes/cone.cpp create mode 100644 tests/ch13_cone.cpp create mode 100644 tests/cone_test.cpp diff --git a/README.md b/README.md index 8a99c40..1821b39 100644 --- a/README.md +++ b/README.md @@ -52,4 +52,6 @@ From Chapter 12 - Cubes: From Chapter 13 - Cylinders: -![Chapter 13 rendering test](output/ch13_test.png) \ No newline at end of file +![Chapter 13 rendering test](output/ch13_test.png) +Bonus: +![Chapter 13 cone test](output/ch13_cone.png) \ No newline at end of file diff --git a/output/ch13_cone.png b/output/ch13_cone.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0eb7a978ee263207bec10e9ba92ffeae5ba519 GIT binary patch literal 134527 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 z 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 F{~z)^!#e-~ literal 0 HcmV?d00001 diff --git a/source/include/cone.h b/source/include/cone.h new file mode 100644 index 0000000..891ce48 --- /dev/null +++ b/source/include/cone.h @@ -0,0 +1,33 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Cone header + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#ifndef DORAYME_CONE_H +#define DORAYME_CONE_H + +#include +#include +#include + +class Cone : public Shape { +protected: + Intersect localIntersect(Ray r); + + Tuple localNormalAt(Tuple point); + + bool checkCap(Ray r, double t, double y); + void intersectCaps(Ray r, Intersect &xs); + +public: + bool isClosed; + double minCap; + double maxCap; + + Cone() : minCap(-INFINITY), maxCap(INFINITY), isClosed(false), Shape(SHAPE_CONE) {}; +}; + +#endif /* DORAYME_CONE_H */ diff --git a/source/shapes/cone.cpp b/source/shapes/cone.cpp new file mode 100644 index 0000000..de41cca --- /dev/null +++ b/source/shapes/cone.cpp @@ -0,0 +1,124 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Cone implementation + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#include +#include +#include +#include +#include + +bool Cone::checkCap(Ray r, double t, double y) +{ + /* Helping function to reduce duplication. + * Checks to see if the intersection ot t is within a radius + * of 1 (the radius of our Cone from the y axis + */ + double x = r.origin.x + t * r.direction.x; + double z = r.origin.z + t * r.direction.z; + return (x * x + z * z) <= fabs(y); +} + +void Cone::intersectCaps(Ray r, Intersect &xs) +{ + /* Caps only mattter is the Cone is closed, and might possibly be + * intersected by the ray + */ + if ((this->isClosed) && (fabs(r.direction.y) > getEpsilon())) + { + double t; + /* Check for an intersection with the lower end cap by intersecting + * the ray with the plan at y = this->minCap + */ + t = (this->minCap - r.origin.y) / r.direction.y; + if (this->checkCap(r, t, this->minCap)) + { + xs.add(Intersection(t, this)); + } + + /* Check for an intersection with the upper end cap by intersecting + * the ray with the plan at y = this->maxCap + */ + t = (this->maxCap - r.origin.y) / r.direction.y; + if (this->checkCap(r, t, this->maxCap)) + { + xs.add(Intersection(t, this)); + } + } +} + +Intersect Cone::localIntersect(Ray r) +{ + Intersect ret; + + double A = pow(r.direction.x, 2) - + pow(r.direction.y, 2) + + pow(r.direction.z, 2); + double B = (2 * r.origin.x * r.direction.x) - + (2 * r.origin.y * r.direction.y) + + (2 * r.origin.z * r.direction.z); + + double C = pow(r.origin.x, 2) - + pow(r.origin.y, 2) + + pow(r.origin.z, 2); + + if ((fabs(A) <= getEpsilon()) && (fabs(B) >= getEpsilon())) + { + double t = -C / (2*B); + ret.add(Intersection(t, this)); + } + else if (fabs(A) >= getEpsilon()) + { + + double disc = pow(B, 2) - 4 * A * C; + + if (disc >= 0) + { + double t0 = (-B - sqrt(disc)) / (2 * A); + double t1 = (-B + sqrt(disc)) / (2 * A); + + double y0 = r.origin.y + t0 * r.direction.y; + if ((this->minCap < y0) && (y0 < this->maxCap)) + { + ret.add(Intersection(t0, this)); + } + + double y1 = r.origin.y + t1 * r.direction.y; + if ((this->minCap < y1) && (y1 < this->maxCap)) + { + ret.add(Intersection(t1, this)); + } + } + } + + this->intersectCaps(r, ret); + + return ret; +} + +Tuple Cone::localNormalAt(Tuple point) +{ + /* Compute the square of the distance from the Y axis */ + double dist = point.x * point.x + point.z * point.z; + + if ((dist < 1) && (point.y >= (this->maxCap - getEpsilon()))) + { + return Vector(0, 1, 0); + } + + if ((dist < 1) && (point.y <= this->minCap + getEpsilon())) + { + return Vector(0, -1, 0); + } + + double y = sqrt(point.x * point.x + point.z * point.z); + if (point.y > 0) + { + y = -y; + } + return Vector(point.x, y, point.z); +} diff --git a/source/tuple.cpp b/source/tuple.cpp index 42a2c27..fb5aba2 100644 --- a/source/tuple.cpp +++ b/source/tuple.cpp @@ -19,6 +19,11 @@ double Tuple::magnitude() Tuple Tuple::normalise() { double mag = this->magnitude(); + if (mag == 0) + { + return Tuple(0, 0, 0, 0); + } + return Tuple(this->x / mag, this->y / mag, this->z / mag, this->w / mag); } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index fdca6f2..b74eb30 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,7 +5,7 @@ find_package(Threads REQUIRED) set(TESTS_SRC math_test.cpp tuple_test.cpp colour_test.cpp canvas_test.cpp matrix_test.cpp transformation_test.cpp ray_test.cpp intersect_test.cpp sphere_test.cpp light_test.cpp material_test.cpp world_test.cpp camera_test.cpp - shape_test.cpp plane_test.cpp pattern_test.cpp cube_test.cpp cylinder_test.cpp) + shape_test.cpp plane_test.cpp pattern_test.cpp cube_test.cpp cylinder_test.cpp cone_test.cpp) add_executable(testMyRays) target_include_directories(testMyRays PUBLIC ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) @@ -74,6 +74,11 @@ target_include_directories(ch13_test PUBLIC ../source/include) target_sources(ch13_test PRIVATE ch13_test.cpp) target_link_libraries(ch13_test rayonnement) +add_executable(ch13_cone) +target_include_directories(ch13_cone PUBLIC ../source/include) +target_sources(ch13_cone PRIVATE ch13_cone.cpp) +target_link_libraries(ch13_cone rayonnement) + add_test(NAME Chapter05_Test COMMAND $) add_test(NAME Chapter06_Test COMMAND $) add_test(NAME Chapter07_Test COMMAND $) @@ -84,4 +89,5 @@ add_test(NAME Chapter11_Refraction COMMAND $) add_test(NAME Chapter11_Test COMMAND $) add_test(NAME Chapter12_Test COMMAND $) add_test(NAME Chapter13_Test COMMAND $) +add_test(NAME Chapter13_ConeBonus COMMAND $) add_test(NAME Hw3Render COMMAND $ ${CMAKE_CURRENT_SOURCE_DIR}/test.hw3scene) \ No newline at end of file diff --git a/tests/ch12_test.cpp b/tests/ch12_test.cpp index eecb4fa..b39ef28 100644 --- a/tests/ch12_test.cpp +++ b/tests/ch12_test.cpp @@ -199,7 +199,7 @@ int main() /* ----------------------------- */ /* Set the camera */ - Camera camera = Camera(1000, 500, 0.785); + Camera camera = Camera(400, 200, 0.785); camera.setTransform(viewTransform(Point(8, 6, -8), Point(0, 3, 0), Vector(0, 1, 0))); diff --git a/tests/ch13_cone.cpp b/tests/ch13_cone.cpp new file mode 100644 index 0000000..b51b857 --- /dev/null +++ b/tests/ch13_cone.cpp @@ -0,0 +1,204 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Render test for reflection in chapter 13. + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +int main() +{ + World w = World(); + + /* Add light */ + Light light = Light(POINT_LIGHT, Point(1, 6.9, -4.9), Colour(1, 1, 1)); + w.addLight(&light); + + /* ----------------------------- */ + + /* The floor */ + Plane floor = Plane(); + floor.material.pattern = new CheckersPattern(Colour(0.5, 0.5, 0.5), Colour(0.75, 0.75, 0.75)); + floor.material.pattern->setTransform(rotationY(0.3) * scaling(0.25, 0.25, 0.25)); + w.addObject(&floor); + + Plane ceiling = Plane(); + ceiling.material.pattern = new CheckersPattern(Colour(0.5, 0.2, 0.5), Colour(0.75, 0.4, 0.75)); + ceiling.material.pattern->setTransform(rotationY(0.3)); + ceiling.setTransform(translation(0, 8, 0)); + w.addObject(&ceiling); + + /* ----------------------------- */ + + Cone cyl1 = Cone(); + cyl1.minCap = -1; + cyl1.maxCap = 0; + cyl1.isClosed = true; + cyl1.setTransform(translation(-1, 0, 1) * scaling(0.5, 1, 0.5) * translation(0, 1, 0)); + cyl1.material.colour = Colour(0, 1, 0.6); + cyl1.material.diffuse = 0.1; + cyl1.material.specular = 0.9; + cyl1.material.shininess = 300; + cyl1.material.reflective = 0.3; + w.addObject(&cyl1); + + /* ----------------------------- */ + + /* Concentrics */ + Cylinder cons1 = Cylinder(); + cons1.minCap = 0; + cons1.maxCap = 0.2; + cons1.isClosed = false; + cons1.setTransform(translation(1, 0, 0) * scaling(0.8, 1, 0.8)); + cons1.material.colour = Colour(1, 1, 0.3); + cons1.material.ambient = 0.1; + cons1.material.diffuse = 0.8; + cons1.material.specular = 0.9; + cons1.material.shininess = 300; + cons1.material.reflective = 0.2; + w.addObject(&cons1); + + Cylinder cons2 = Cylinder(); + cons2.minCap = 0; + cons2.maxCap = 0.3; + cons2.isClosed = false; + cons2.setTransform(translation(1, 0, 0) * scaling(0.6, 1, 0.6)); + cons2.material.colour = Colour(1, 0.9, 0.4); + cons2.material.ambient = 0.1; + cons2.material.diffuse = 0.8; + cons2.material.specular = 0.9; + cons2.material.shininess = 300; + cons2.material.reflective = 0.2; + w.addObject(&cons2); + + Cylinder cons3 = Cylinder(); + cons3.minCap = 0; + cons3.maxCap = 0.4; + cons3.isClosed = false; + cons3.setTransform(translation(1, 0, 0) * scaling(0.4, 1, 0.4)); + cons3.material.colour = Colour(1, 0.8, 0.5); + cons3.material.ambient = 0.1; + cons3.material.diffuse = 0.8; + cons3.material.specular = 0.9; + cons3.material.shininess = 300; + cons3.material.reflective = 0.2; + w.addObject(&cons3); + + Cylinder cons4 = Cylinder(); + cons4.minCap = 0; + cons4.maxCap = 0.5; + cons4.isClosed = true; + cons4.setTransform(translation(1, 0, 0) * scaling(0.2, 1, 0.2)); + cons4.material.colour = Colour(1, 0.7, 0.6); + cons4.material.ambient = 0.1; + cons4.material.diffuse = 0.8; + cons4.material.specular = 0.9; + cons4.material.shininess = 300; + cons4.material.reflective = 0.2; + w.addObject(&cons4); + + /* ----------------------------- */ + + /* decoratives cylinders */ + Cylinder deco1 = Cylinder(); + deco1.minCap = 0; + deco1.maxCap = 0.3; + deco1.isClosed = true; + deco1.setTransform(translation(0, 0, -0.75) * scaling(0.05, 1, 0.05)); + deco1.material.colour = Colour(1, 0, 0); + deco1.material.ambient = 0.1; + deco1.material.diffuse = 0.9; + deco1.material.specular = 0.9; + deco1.material.shininess = 300; + deco1.material.reflective = 0.5; + w.addObject(&deco1); + + Cylinder deco2 = Cylinder(); + deco2.minCap = 0; + deco2.maxCap = 0.3; + deco2.isClosed = true; + deco2.setTransform(translation(0, 0, -2.25) * rotationY(-0.15) * translation(0, 0, 1.5) * scaling(0.05, 1, 0.05)); + deco2.material.colour = Colour(1, 1, 0); + deco2.material.ambient = 0.1; + deco2.material.diffuse = 0.9; + deco2.material.specular = 0.9; + deco2.material.shininess = 300; + deco2.material.reflective = 0.5; + w.addObject(&deco2); + + Cylinder deco3 = Cylinder(); + deco3.minCap = 0; + deco3.maxCap = 0.3; + deco3.isClosed = true; + deco3.setTransform(translation(0, 0, -2.25) * rotationY(-0.3) * translation(0, 0, 1.5) * scaling(0.05, 1, 0.05)); + deco3.material.colour = Colour(0, 1, 0); + deco3.material.ambient = 0.1; + deco3.material.diffuse = 0.9; + deco3.material.specular = 0.9; + deco3.material.shininess = 300; + deco3.material.reflective = 0.5; + w.addObject(&deco3); + + Cylinder deco4 = Cylinder(); + deco4.minCap = 0; + deco4.maxCap = 0.3; + deco4.isClosed = true; + deco4.setTransform(translation(0, 0, -2.25) * rotationY(-0.45) * translation(0, 0, 1.5) * scaling(0.05, 1, 0.05)); + deco4.material.colour = Colour(0, 1, 1); + deco4.material.ambient = 0.1; + deco4.material.diffuse = 0.9; + deco4.material.specular = 0.9; + deco4.material.shininess = 300; + deco4.material.reflective = 0.5; + w.addObject(&deco4); + + /* ----------------------------- */ + + Cone glassCylinder = Cone(); + glassCylinder.minCap = 0.001; + glassCylinder.maxCap = 1; + glassCylinder.isClosed = true; + glassCylinder.dropShadow = false; + glassCylinder.setTransform(translation(0, 0, -1.5) * scaling(0.33, 1, 0.33)); + glassCylinder.material.colour = Colour(0.2, 0.63, 0.24); + glassCylinder.material.diffuse = 0.1; + glassCylinder.material.specular = 0.9; + glassCylinder.material.shininess = 300; + glassCylinder.material.reflective = 0.3; + w.addObject(&glassCylinder); + + /* ----------------------------- */ + + /* Set the camera */ + Camera camera = Camera(400, 200, 0.314); + camera.setTransform(viewTransform(Point(8, 3.5, -9), + Point(0, 0.3, 0), + Vector(0, 1, 0))); + + /* Now render it */ + Canvas image = camera.render(w, 20); + + image.SaveAsPNG("ch13_cone.png"); + + return 0; +} \ No newline at end of file diff --git a/tests/cone_test.cpp b/tests/cone_test.cpp new file mode 100644 index 0000000..ed37f3c --- /dev/null +++ b/tests/cone_test.cpp @@ -0,0 +1,132 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Cone unit tests + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#include +#include +#include +#include +#include + +class ConeTest : public Cone +{ +public: + Tuple doLocalNormalAt(Tuple point) + { + return localNormalAt(point); + } +}; + +TEST(ConeTest, Intersecting_a_cone_with_a_ray) +{ + Cone cone = Cone(); + + Point Origins[] = { + Point(0, 0, -5), + Point(0, 0, -5), + Point(1, 1, -5), + }; + + Vector Directions[] = { + Vector(0, 0, 1), + Vector(1, 1, 1), + Vector(-0.5, -1, 1), + }; + + double t0s[] = { 5, 8.66025, 4.55006 }; + double t1s[] = { 5, 8.66025, 49.44994 }; + + int i; + for(i = 0; i < 3; i++) + { + Tuple direction = Directions[i].normalise(); + Ray r = Ray(Origins[i], direction); + + Intersect xs = cone.intersect(r); + + /* Temporary lower the precision */ + set_equal_precision(0.00001); + + ASSERT_EQ(xs.count(), 2); + EXPECT_TRUE(double_equal(xs[0].t, t0s[i])); + EXPECT_TRUE(double_equal(xs[1].t, t1s[i])); + + set_equal_precision(FLT_EPSILON); + } +} + +TEST(ConeTest, Intersecting_a_cone_with_a_ray_parall_to_one_of_its_halves) +{ + Cone cone = Cone(); + Tuple direction = Vector(0, 1, 1).normalise(); + Ray r = Ray(Point(0, 0, -1), direction); + Intersect xs = cone.intersect(r); + ASSERT_EQ(xs.count(), 1); + + /* Temporary lower the precision */ + set_equal_precision(0.00001); + + ASSERT_TRUE(double_equal(xs[0].t, 0.35355)); + + set_equal_precision(FLT_EPSILON); + +} +TEST(ConeTest, Intersecting_a_cone_end_cap) +{ + Point Origins[] = { + Point(0, 0, -5), + Point(0, 0, -0.25), + Point(0, 0, -0.25), + }; + + Vector Directions[] = { + Vector(0, 1, 0), + Vector(0, 1, 1), + Vector(0, 1, 0), + }; + + uint32_t Counts[] = { 0, 2, 4 }; + + Cone cone = Cone(); + cone.minCap = -0.5; + cone.maxCap = 0.5; + cone.isClosed = true; + + int i; + for(i = 0; i < 3; i++) + { + Tuple direction = Directions[i].normalise(); + Ray r = Ray(Origins[i], direction); + + Intersect xs = cone.intersect(r); + + ASSERT_EQ(xs.count(), Counts[i]); + } +} + +TEST(ConeTest, Computing_the_normal_vector_on_a_cone) +{ + ConeTest cone = ConeTest(); + + Point HitPointss[] = { + Point(0, 0, 0), + Point(1, 1, 1), + Point(-1, -1, 0), + }; + + Vector Normals[] = { + Vector(0, 0, 0), + Vector(1, -sqrt(2), 1), + Vector(-1, 1, 0), + }; + + int i; + for(i = 0; i < 3; i++) + { + ASSERT_EQ(cone.doLocalNormalAt(HitPointss[i]), Normals[i]); + } +}