Add Colour implementation
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
# To simplify testing, the app is build in two passes,
|
# To simplify testing, the app is build in two passes,
|
||||||
|
|
||||||
# First most is build as a library
|
# 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_HEADERS include/tuples.h include/math_helper.h include/colour.h)
|
||||||
set(RAY_SOURCES tuples.cpp)
|
set(RAY_SOURCES tuples.cpp math_helper.cpp colour.cpp)
|
||||||
|
|
||||||
target_include_directories(rayonnement PUBLIC include)
|
target_include_directories(rayonnement PUBLIC include)
|
||||||
target_sources(rayonnement PRIVATE ${RAY_HEADERS} ${RAY_SOURCES})
|
target_sources(rayonnement PRIVATE ${RAY_HEADERS} ${RAY_SOURCES})
|
||||||
|
|||||||
10
source/colour.cpp
Normal file
10
source/colour.cpp
Normal file
@@ -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"
|
||||||
|
|
||||||
32
source/include/colour.h
Normal file
32
source/include/colour.h
Normal file
@@ -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 <tuples.h>
|
||||||
|
|
||||||
|
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 */
|
||||||
@@ -3,7 +3,7 @@ project(DoRayTested)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
set(TESTS_SRC tuples_test.cpp)
|
set(TESTS_SRC tuples_test.cpp colour_test.cpp)
|
||||||
|
|
||||||
add_executable(testMyRays)
|
add_executable(testMyRays)
|
||||||
target_include_directories(testMyRays PUBLIC ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
|
target_include_directories(testMyRays PUBLIC ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
|
||||||
|
|||||||
51
tests/colour_test.cpp
Normal file
51
tests/colour_test.cpp
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* DoRayMe - a quick and dirty Raytracer
|
||||||
|
* Colour unit tests
|
||||||
|
*
|
||||||
|
* Created by Manoël Trapier
|
||||||
|
* Copyright (c) 2020 986-Studio.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <colour.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user