diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 26d9f3b..7559696 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -1,10 +1,10 @@ # To simplify testing, the app is build in two passes, # First most is build as a library -add_library(rayonnement STATIC math_helper.cpp) +add_library(rayonnement STATIC) -set(RAY_HEADERS include/tuples.h include/math_helper.h) -set(RAY_SOURCES tuples.cpp) +set(RAY_HEADERS include/tuples.h include/math_helper.h include/colour.h) +set(RAY_SOURCES tuples.cpp math_helper.cpp colour.cpp) target_include_directories(rayonnement PUBLIC include) target_sources(rayonnement PRIVATE ${RAY_HEADERS} ${RAY_SOURCES}) diff --git a/source/colour.cpp b/source/colour.cpp new file mode 100644 index 0000000..a1a3692 --- /dev/null +++ b/source/colour.cpp @@ -0,0 +1,10 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Colour implementation + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#include "colour.h" + diff --git a/source/include/colour.h b/source/include/colour.h new file mode 100644 index 0000000..33c89bd --- /dev/null +++ b/source/include/colour.h @@ -0,0 +1,32 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Colour header + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#ifndef DORAYME_COLOUR_H +#define DORAYME_COLOUR_H + +#include + +class Colour : public Tuple +{ +public: + Colour(double red, double green, double blue) : Tuple(red, green, blue, 0) {}; + double red() { return this->x; }; + double green() { return this->y; }; + double blue() { return this->z; }; + double red(double v) { this->x = v; return v; }; + double green(double v) { this->y = v; return v; }; + double blue(double v) { this->z = v; return v; }; + + using Tuple::operator*; + Colour operator*(const Colour &b) const { return Colour(this->x * b.x, + this->y * b.y, + this->z * b.z); }; +}; + + +#endif /* DORAYME_COLOUR_H */ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index abdd724..6080bec 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,7 +3,7 @@ project(DoRayTested) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) -set(TESTS_SRC tuples_test.cpp) +set(TESTS_SRC tuples_test.cpp colour_test.cpp) add_executable(testMyRays) target_include_directories(testMyRays PUBLIC ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) diff --git a/tests/colour_test.cpp b/tests/colour_test.cpp new file mode 100644 index 0000000..0807d20 --- /dev/null +++ b/tests/colour_test.cpp @@ -0,0 +1,51 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Colour unit tests + * + * Created by Manoël Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#include +#include +#include + +TEST(ColourTest, Color_is_tuple) +{ + Colour c = Colour(-0.5, 0.4, 1.7); + + ASSERT_EQ(c.red(), -0.5); + ASSERT_EQ(c.green(), 0.4); + ASSERT_EQ(c.blue(), 1.7); +} + +TEST(ColourTest, Adding_colours) +{ + Colour c1 = Colour(0.9, 0.6, 0.75); + Colour c2 = Colour(0.7, 0.1, 0.25); + + ASSERT_EQ(c1 + c2, Colour(1.6, 0.7, 1.0)); +} + +TEST(ColourTest, Substracting_colours) +{ + Colour c1 = Colour(0.9, 0.6, 0.75); + Colour c2 = Colour(0.7, 0.1, 0.25); + + ASSERT_EQ(c1 - c2, Colour(0.2, 0.5, 0.5)); +} + +TEST(ColourTest, Multiplying_colour_by_a_scalar) +{ + Colour c = Colour(0.2, 0.3, 0.4); + + ASSERT_EQ(c * 2, Colour(0.4, 0.6, 0.8)); +} + +TEST(ColourTest, Multiplying_colours) +{ + Colour c1 = Colour(1, 0.2, 0.4); + Colour c2 = Colour(0.9, 1, 0.1); + + ASSERT_EQ(c1 * c2, Colour(0.9, 0.2, 0.04)); +} \ No newline at end of file