/*! * 11_reflection_refraction.cpp * * Copyright (c) 2015-2024, NADAL Jean-Baptiste. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * @Author: NADAL Jean-Baptiste * @Date: 05/03/2024 * */ /*---------------------------------------------------------------------------*/ #include #include "raytracing.h" using namespace Raytracer; /* ------------------------------------------------------------------------- */ SCENARIO("Reflectivity for the default material", "[features/materials.feature]") { GIVEN("m <- material()") { Material m; THEN("m.reflective = 0.0") { REQUIRE(m.reflective() == 0); } } } /* ------------------------------------------------------------------------- */ SCENARIO("Precomputing the reflection vector", "[features/intersections.feature]") { GIVEN("shape <- plane()") { Plane shape; AND_GIVEN("r <- ray(point(0, 1, -1), vector(0, -sqrt(2)/2, sqrt(2)/2))") { Ray r(Tuple::Point(0, 1, -1), Tuple::Vector(0, -sqrt(2) / 2, sqrt(2) / 2)); AND_GIVEN("i <- intersection(sqrt(2), shape)") { Intersection i(sqrt(2), &shape); WHEN("comps <- prepare_computation(i, r)") { IntersectionData comps = i.prepare_computations(r); THEN("comps.reflectv = vector(0, sqrt(2) / 2, sqrt(2) / 2)") { REQUIRE(comps.reflectv() == Tuple::Vector(0, sqrt(2) / 2, sqrt(2) / 2)); } } } } } }