diff --git a/example/darkroom/two_spheres.hpp b/example/darkroom/two_spheres.hpp new file mode 100644 index 00000000..94011580 --- /dev/null +++ b/example/darkroom/two_spheres.hpp @@ -0,0 +1,94 @@ +/*============================================================================= + Copyright (c) 2011-2013 Bolero MURAKAMI + https://github.com/bolero-MURAKAMI/Sprout + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ +#ifndef EXAMPLE_DARKROOM_TWO_SPHERES_HPP +#define EXAMPLE_DARKROOM_TWO_SPHERES_HPP + +#include +#include + +namespace darkcult { + using namespace sprout::darkroom; + // + // object + // + SPROUT_STATIC_CONSTEXPR auto object = sprout::make_tuple( + objects::make_aa_plane( + sprout::darkroom::objects::aa_plane_direction::y, + -2.0, + materials::make_plaid_material_image( + colors::rgb_f(1.0, 0.0, 0.0), + colors::rgb_f(1.0, 1.0, 0.0), + 0.0, + 0.0 + ) + ), + objects::make_sphere( + coords::vector3d(-1.0, 0.5, 7.5), + 2.5, + materials::make_uniform_material_image( + colors::rgb_f(0.0, 0.0, 1.0), + 0.2 + ) + ), + objects::make_sphere( + coords::vector3d(1.0, -1.0, 4.0), + 1.0, + materials::make_uniform_material_image( + colors::rgb_f(0.0, 1.0, 0.0), + 0.2 + ) + ) + ); + // + // light + // + SPROUT_STATIC_CONSTEXPR auto light = lights::make_light_list( + lights::make_point_light( + coords::vector3d(-3.0, 5.0, 0.0), + colors::rgb_f(7.0, 7.0, 7.0) + ), + lights::make_parallel_light( + coords::vector3d(0.0, 1.0, 0.0), + colors::rgb_f(0.1, 0.1, 0.1) + ), + lights::make_parallel_light( + coords::vector3d(1.0, 0.5, 0.0), + colors::rgb_f(0.1, 0.1, 0.1) + ), + lights::make_parallel_light( + coords::vector3d(-1.0, 0.5, 0.0), + colors::rgb_f(0.1, 0.1, 0.1) + ), + lights::make_parallel_light( + coords::vector3d(0.0, 0.5, 1.0), + colors::rgb_f(0.1, 0.1, 0.1) + ), + lights::make_parallel_light( + coords::vector3d(0.0, 0.5, -1.0), + colors::rgb_f(0.1, 0.1, 0.1) + ) + ); + // + // camera + // + SPROUT_STATIC_CONSTEXPR auto camera = cameras::make_simple_camera( + sprout::math::root_three() / 2 + ); + // + // renderer + // + SPROUT_STATIC_CONSTEXPR auto renderer = renderers::make_whitted_style( + renderers::make_uniform_color(colors::rgb_f(0.0, 0.0, 0.0)) + ); + // + // raytracer + // + SPROUT_STATIC_CONSTEXPR auto raytracer = tracers::make_raytracer(); +} // namespace darkcult + +#endif // #ifndef EXAMPLE_DARKROOM_TWO_SPHERES_HPP diff --git a/sprout/math/constants.hpp b/sprout/math/constants.hpp index 04855d77..951f4b8f 100644 --- a/sprout/math/constants.hpp +++ b/sprout/math/constants.hpp @@ -120,6 +120,7 @@ namespace sprout { } // // root_two + // root_three // half_root_two // template @@ -127,6 +128,10 @@ namespace sprout { return 1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623L; } template + inline SPROUT_CONSTEXPR T root_three() { + return 1.73205080756887729352744634150587236694280525381038062805580697945193301690880003708114618675724857567562614142L; + } + template inline SPROUT_CONSTEXPR T half_root_two() { return 0.707106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115L; } diff --git a/tools/darkroom/darkcult.cpp b/tools/darkroom/darkcult.cpp index a46c70b2..68774dc8 100644 --- a/tools/darkroom/darkcult.cpp +++ b/tools/darkroom/darkcult.cpp @@ -9,7 +9,7 @@ // DARKROOM_SOURCE // #ifndef DARKROOM_SOURCE -# error DARKROOM_SOURCE not defined. for example: "scene.hpp" +# error DARKROOM_SOURCE not defined. for example: "../../example/darkroom/two_spheres.hpp" #else # include DARKROOM_SOURCE #endif diff --git a/tools/darkroom/darkcult.sh b/tools/darkroom/darkcult.sh index 780f10d4..41809be3 100755 --- a/tools/darkroom/darkcult.sh +++ b/tools/darkroom/darkcult.sh @@ -9,7 +9,7 @@ # # requires: ImageMagick (http://www.imagemagick.org/script/index.php) # -src="" +src="../../example/darkroom/two_spheres.hpp" stagedir="darkroom" width=16 height=16 @@ -46,7 +46,7 @@ echo ": tile-width = ${tile_width}" echo ": tile-height = ${tile_height}" echo ": force = ${force}" -if [ ! -f "${src}" ]; then +if [ ! -f "${src}" -a ! -f "$(cd $(dirname $0); pwd)/${src}" ]; then echo >&2 -e ": \e[31msource(${src}) is not exist.\e[m" exit 1 fi @@ -96,4 +96,4 @@ popd let elapsed=$SECONDS-$start echo ": elapsed = ${elapsed}s" -echo ": finished" +echo ": finished."