diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7d9b873..0d0bc6e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -15,4 +15,10 @@ target_link_libraries(testMyRays gtest gtest_main rayonnement Threads::Threads) gtest_discover_tests(testMyRays WORKING_DIRECTORY ${PROJECT_DIR} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_DIR}" - ) \ No newline at end of file + ) + + +add_executable(ch5_test) +target_include_directories(ch5_test PUBLIC ../source/include) +target_sources(ch5_test PRIVATE ch5_test.cpp) +target_link_libraries(ch5_test rayonnement) \ No newline at end of file diff --git a/tests/ch5_test.cpp b/tests/ch5_test.cpp new file mode 100644 index 0000000..2d9c80f --- /dev/null +++ b/tests/ch5_test.cpp @@ -0,0 +1,46 @@ +/* + * DoRayMe - a quick and dirty Raytracer + * Render test for chapter 5 "Put it together". + * + * Created by Manoƫl Trapier + * Copyright (c) 2020 986-Studio. + * + */ +#include +#include +#include +#include +#include + +int main() +{ + int x, y; + Canvas c = Canvas(100, 100); + + Sphere s = Sphere(); + Colour red = Colour(1, 0, 0); + + Point cameraOrigin = Point(0, 0, -5); + double wallDistance = 10; + double wallSize = 7; + double pixelSize = wallSize / c.width; + for(y = 0; y < c.height; y++) + { + double worldY = (wallSize / 2) - pixelSize * y; + for(x = 0; x < c.width; x++) + { + double worldX = (wallSize / 2) - pixelSize * x; + Point position = Point(worldX, worldY, wallDistance); + Ray r = Ray(cameraOrigin, (position - cameraOrigin).normalise()); + Intersect xs = s.intersect(r); + + if (!xs.hit().nothing()) + { + c.put_pixel(x, y, red); + } + } + } + + c.SaveAsPNG("ch5_test.png"); + return 0; +} \ No newline at end of file