Triangles!!!
This commit is contained in:
@@ -6,7 +6,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 cone_test.cpp group_test.cpp
|
||||
boundingbox_test.cpp)
|
||||
boundingbox_test.cpp triangle_test.cpp)
|
||||
|
||||
add_executable(testMyRays)
|
||||
target_include_directories(testMyRays PUBLIC ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
|
||||
|
||||
91
tests/triangle_test.cpp
Normal file
91
tests/triangle_test.cpp
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* DoRayMe - a quick and dirty Raytracer
|
||||
* Triangle unit tests
|
||||
*
|
||||
* Created by Manoël Trapier
|
||||
* Copyright (c) 2020 986-Studio.
|
||||
*
|
||||
*/
|
||||
#include <triangle.h>
|
||||
#include <math.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(TriangleTest, Construcring_a_triangle)
|
||||
{
|
||||
Point p1 = Point(0, 1, 0);
|
||||
Point p2 = Point(-1, 0, 0);
|
||||
Point p3 = Point(1, 0, 0);
|
||||
|
||||
Triangle t = Triangle(p1, p2, p3);
|
||||
|
||||
ASSERT_EQ(t.p1, p1);
|
||||
ASSERT_EQ(t.p2, p2);
|
||||
ASSERT_EQ(t.p3, p3);
|
||||
ASSERT_EQ(t.e1, Vector(-1, -1, 0));
|
||||
ASSERT_EQ(t.e2, Vector(1, -1, 0));
|
||||
ASSERT_EQ(t.normal, Vector(0, 0, -1));
|
||||
}
|
||||
|
||||
TEST(TriangleTest, Finding_the_normal_on_a_triangle)
|
||||
{
|
||||
Triangle t = Triangle(Point(0, 1, 0), Point(-1, 0, 0), Point(1, 0, 0));
|
||||
|
||||
Tuple n1 = t.normalAt(Point(0, 0.5, 0));
|
||||
Tuple n2 = t.normalAt(Point(-0.5, 0.75, 0));
|
||||
Tuple n3 = t.normalAt(Point(0.5, 0.25, 0));
|
||||
|
||||
ASSERT_EQ(n1, t.normal);
|
||||
ASSERT_EQ(n2, t.normal);
|
||||
ASSERT_EQ(n3, t.normal);
|
||||
}
|
||||
|
||||
TEST(TriangleTest, Intersecting_a_ray_parallel_to_the_triangle)
|
||||
{
|
||||
Triangle t = Triangle(Point(0, 1, 0), Point(-1, 0, 0), Point(1, 0, 0));
|
||||
Ray r = Ray(Point(0, -1, -2), Vector(0, 1, 0));
|
||||
|
||||
Intersect xs = t.intersect(r);
|
||||
|
||||
ASSERT_EQ(xs.count(), 0);
|
||||
}
|
||||
|
||||
TEST(TriangleTest, A_ray_miss_the_p1_p3_edge)
|
||||
{
|
||||
Triangle t = Triangle(Point(0, 1, 0), Point(-1, 0, 0), Point(1, 0, 0));
|
||||
Ray r = Ray(Point(1, 1, -2), Vector(0, 0, 1));
|
||||
|
||||
Intersect xs = t.intersect(r);
|
||||
|
||||
ASSERT_EQ(xs.count(), 0);
|
||||
}
|
||||
|
||||
TEST(TriangleTest, A_ray_miss_the_p1_p2_edge)
|
||||
{
|
||||
Triangle t = Triangle(Point(0, 1, 0), Point(-1, 0, 0), Point(1, 0, 0));
|
||||
Ray r = Ray(Point(-1, 1, -2), Vector(0, 0, 1));
|
||||
|
||||
Intersect xs = t.intersect(r);
|
||||
|
||||
ASSERT_EQ(xs.count(), 0);
|
||||
}
|
||||
|
||||
TEST(TriangleTest, A_ray_miss_the_p2_p3_edge)
|
||||
{
|
||||
Triangle t = Triangle(Point(0, 1, 0), Point(-1, 0, 0), Point(1, 0, 0));
|
||||
Ray r = Ray(Point(0, -1, -2), Vector(0, 0, 1));
|
||||
|
||||
Intersect xs = t.intersect(r);
|
||||
|
||||
ASSERT_EQ(xs.count(), 0);
|
||||
}
|
||||
|
||||
TEST(TriangleTest, A_ray_strikes_a_triangle)
|
||||
{
|
||||
Triangle t = Triangle(Point(0, 1, 0), Point(-1, 0, 0), Point(1, 0, 0));
|
||||
Ray r = Ray(Point(0, .5, -2), Vector(0, 0, 1));
|
||||
|
||||
Intersect xs = t.intersect(r);
|
||||
|
||||
ASSERT_EQ(xs.count(), 1);
|
||||
EXPECT_EQ(xs[0].t, 2);
|
||||
}
|
||||
Reference in New Issue
Block a user