]> git.tdb.fi Git - libs/gl.git/commitdiff
Add a day-night cycle to the desertpillars demo
authorMikko Rasa <tdb@tdb.fi>
Sat, 16 Oct 2021 15:53:53 +0000 (18:53 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 16 Oct 2021 16:03:01 +0000 (19:03 +0300)
demos/desertpillars/source/desertpillars.cpp
demos/desertpillars/source/desertpillars.h

index 84583551a75d484ca9a2c52d55680897738c6873..513d81743d700dec32bc734eea0ff63357ea4a49 100644 (file)
@@ -29,6 +29,8 @@ DesertPillars::DesertPillars(int, char **):
        sphere_morph(0.0f),
        sphere_frozen(false),
        sphere_stopped(false),
+       sun(resources.get<GL::DirectionalLight>("Sun.light")),
+       sun_angle(Geometry::Angle<float>::from_turns(0.1f)),
        camera_stopped(false)
 {
        window.set_title("Desert Pillars");
@@ -43,7 +45,6 @@ DesertPillars::DesertPillars(int, char **):
        global_env->set_fixed_position(GL::Vector3(0.0f, 0.0f, 0.0f));
        global_env->set_debug_name("Global environment");
 
-       GL::DirectionalLight &sun = resources.get<GL::DirectionalLight>("Sun.light");
        sky = make_unique<GL::Sky>(*global_env, sun);
        sky->set_debug_name("Sky");
 
@@ -78,6 +79,10 @@ DesertPillars::DesertPillars(int, char **):
        view.set_content(sequence.get());
        view.set_camera(&camera);
 
+       const GL::Vector3 &sun_direction = sun.get_direction();
+       sun_node = normalize(GL::Vector3(sun_direction.y, -sun_direction.x, 0.0f));
+       sun_axis = normalize(cross(sun_direction, sun_node));
+
        const GL::Vector3 &cam_pos = camera.get_position();
        camera_distance = cam_pos.norm();
        camera_angle = Geometry::atan2(cam_pos.y, cam_pos.x);
@@ -118,6 +123,9 @@ void DesertPillars::tick()
                camera.set_look_direction(-cam_dir);
        }
 
+       sun_angle += Geometry::Angle<float>::from_degrees(4*dt/Time::sec);
+       sun.set_direction(GL::Matrix::rotation(sun_angle, sun_axis)*-sun_node);
+
        display.tick();
        view.render();
 }
index c6242ad313d9eac4b257b1ec1d7fd37e9e4ed420..417073816b0fd50fe433de311fb571817e4de295 100644 (file)
@@ -78,6 +78,11 @@ private:
        bool sphere_frozen;
        bool sphere_stopped;
 
+       Msp::GL::DirectionalLight &sun;
+       Msp::GL::Vector3 sun_node;
+       Msp::GL::Vector3 sun_axis;
+       Msp::Geometry::Angle<float> sun_angle;
+
        float camera_distance;
        Msp::Geometry::Angle<float> camera_base_height;
        Msp::Geometry::Angle<float> camera_angle;