diff --git a/res/models/sources b/res/models/sources new file mode 100644 index 0000000..e1250e9 --- /dev/null +++ b/res/models/sources @@ -0,0 +1,9 @@ +# Model Sources + +Thanks! + +https://sketchfab.com/3d-models/fur-tree-41fa3210e50944eaa489c148e5e2ccc7#download + +https://sketchfab.com/3d-models/beetle-42c85b6e79b949eea51fd5d6c37a457f + +https://sketchfab.com/3d-models/single-grass-52b3808c8a4f48188ff9a1217f2d84aa diff --git a/res/shaders/simple.frag b/res/shaders/simple.frag index ac22e86..5d302ed 100644 --- a/res/shaders/simple.frag +++ b/res/shaders/simple.frag @@ -165,7 +165,7 @@ void main() { c.rgb += backlight_color * clamp((dot(normalize(vertex), nnormal) + backlight_strength) / backlight_strength, 0, 1); float fog = linearDepth()/1500; - c.rgb = mix(c.rgb, fog_color, pow(fog,1.2)*fog_strength); + if (fog_strength > 0.05) c.rgb = mix(c.rgb, fog_color, pow(fog,1.2)*fog_strength); color_out = c; } diff --git a/src/renderlogic.cpp b/src/renderlogic.cpp index 3a84387..61ad043 100644 --- a/src/renderlogic.cpp +++ b/src/renderlogic.cpp @@ -30,10 +30,6 @@ sf::SoundBuffer* buffer; Gloom::Shader* current_shader = nullptr; Gloom::Shader* prev_shader = nullptr; // The last shader to glDrawElements -// uniforms in the scene -vec3 fog_color = vec3(0); -float fog_strength = 0; - // the framebuffer we render the scene to before post-processing GLuint framebufferID = 0; GLuint framebufferTextureID = 0; diff --git a/src/scene.cpp b/src/scene.cpp index 609c490..bac69a9 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -30,6 +30,9 @@ vec3 cameraPosition = vec3(420, -120, 190); vec3 cameraLookAt = vec3(460, 220, 0); vec3 cameraUpward = vec3(0, 0, 1); +vec3 fog_color = vec3(1.0); +float fog_strength = 0; + const size_t N_GRASS = 150; const size_t N_TREES = 30; const size_t DISPLACEMENT = 30; @@ -252,19 +255,20 @@ void step_scene(double timeDelta) { // time of day events { - struct seq_t { double t; vec3 light_c; vec3 bg_c; bool has_headlights; }; + struct seq_t { double t; vec3 light_c; vec3 bg_c; bool has_headlights; vec3 fog_c; float fog; }; static const vector sequence = { - { 0, vec3(0.2 , 0.2 , 0.7), vec3(0.05, 0.1 , 0.15), 1}, // night - { 9, vec3(0.4 , 0.4 , 0.8), vec3(0.15, 0.15, 0.35), 1}, // dusk - {10, vec3(1.0 , 0.6 , 0.4), vec3(0.8 , 0.4 , 0.2 ), 1}, // sunrise - {11, vec3(0.9 , 0.7 , 0.5), vec3(0.8 , 0.6 , 0.2 ), 1}, // sunrise2 - {12, vec3(0.85, 0.85, 0.9), vec3(0.3 , 0.5 , 0.8 ), 0}, // morning - {18, vec3(1.0 , 1.0 , 1.0), vec3(0.35, 0.6 , 0.9 ), 0}, // noon - {24, vec3(0.7 , 0.9 , 1.0), vec3(0.3 , 0.5 , 0.8 ), 0}, // evening - {25, vec3(0.9 , 0.7 , 0.5), vec3(0.8 , 0.6 , 0.2 ), 0}, // sundown - {26, vec3(1.0 , 0.6 , 0.4), vec3(0.8 , 0.4 , 0.2 ), 1}, // sunset - {27, vec3(0.5 , 0.5 , 0.8), vec3(0.35, 0.15, 0.35), 1}, // dusk - {36, vec3(0.2 , 0.2 , 0.7), vec3(0.05, 0.1 , 0.15), 1}, // night + { 0, vec3(0.2 , 0.2 , 0.7), vec3(0.05, 0.1 , 0.15), 1, vec3(0.2 , 0.2 , 0.7), 0.0}, // night + { 1, vec3(0.2 , 0.2 , 0.7), vec3(0.05, 0.1 , 0.15), 1, vec3(0.2 , 0.2 , 0.7), 0.6}, // night + { 9, vec3(0.4 , 0.4 , 0.8), vec3(0.15, 0.15, 0.35), 1, vec3(0.5 , 0.5 , 0.8), 0.7}, // dusk + {10, vec3(1.0 , 0.6 , 0.4), vec3(0.8 , 0.4 , 0.2 ), 1, vec3(1.0 , 0.7 , 0.6), 0.8}, // sunrise + {11, vec3(0.9 , 0.7 , 0.5), vec3(0.8 , 0.6 , 0.2 ), 1, vec3(1.0 , 0.85, 0.7), 0.9}, // sunrise2 + {12, vec3(0.85, 0.85, 0.9), vec3(0.3 , 0.5 , 0.8 ), 0, vec3(0.85, 0.85, 0.9), 0.8}, // morning + {18, vec3(1.0 , 1.0 , 1.0), vec3(0.35, 0.6 , 0.9 ), 0, vec3(1.0 , 1.0 , 1.0), 0.0}, // noon + {24, vec3(0.7 , 0.9 , 1.0), vec3(0.3 , 0.5 , 0.8 ), 0, vec3(1.0 , 1.0 , 1.0), 0.0}, // evening + {25, vec3(0.9 , 0.7 , 0.5), vec3(0.8 , 0.6 , 0.2 ), 0, vec3(1.0 , 1.0 , 1.0), 0.0}, // sundown + {26, vec3(1.0 , 0.6 , 0.4), vec3(0.8 , 0.4 , 0.2 ), 1, vec3(1.0 , 1.0 , 1.0), 0.0}, // sunset + {27, vec3(0.5 , 0.5 , 0.8), vec3(0.35, 0.15, 0.35), 1, vec3(1.0 , 1.0 , 1.0), 0.0}, // dusk + {36, vec3(0.2 , 0.2 , 0.7), vec3(0.05, 0.1 , 0.15), 1, vec3(1.0 , 1.0 , 1.0), 0.0}, // night }; assert(sequence.front().light_c == sequence.back().light_c); assert(sequence.front().bg_c == sequence.back().bg_c); @@ -272,15 +276,20 @@ void step_scene(double timeDelta) { static const size_t seq_size = sequence.size(); static size_t /*current*/ seq_pos = 0; - double t = fmod(timeAcc, t_max); + double t = fmod(timeAcc+34, t_max); while (sequence[(seq_pos+1) % seq_size].t < t || sequence[seq_pos].t > t) seq_pos = (seq_pos+1) % seq_size; const seq_t& seq_a = sequence[seq_pos]; const seq_t& seq_b = sequence[(seq_pos+1) % seq_size]; - double /*interpolation */f/*actor*/ = (t - seq_a.t) / (seq_b.t - seq_a.t); - lightNode[0]->light_color = vec3(seq_a.light_c * (1-f) + seq_b.light_c * f); - vec3 bg_color = vec3(seq_a.bg_c * (1-f) + seq_b.bg_c * f); + double /*interpolation */f/*actor*/ = (t - seq_a.t) / (seq_b.t - seq_a.t); + + lightNode[0]->light_color = seq_a.light_c * (1-f) + seq_b.light_c * f; + vec3 bg_color = seq_a.bg_c * (1-f) + seq_b.bg_c * f; + fog_color = seq_a.fog_c * (1-f) + seq_b.fog_c * f; + fog_strength = seq_a.fog * (1-f) + seq_b.fog * f; + + bg_color = glm::mix(bg_color, fog_color, fog_strength); glClearColor(bg_color.r, bg_color.g, bg_color.b, 1.0f); /*interpolation */f/*actor*/ = t/t_max; diff --git a/src/scene.hpp b/src/scene.hpp index e6c47de..850da03 100644 --- a/src/scene.hpp +++ b/src/scene.hpp @@ -9,6 +9,9 @@ extern SceneNode* rootNode; extern SceneNode* hudNode; extern SceneNode* lightNode[N_LIGHTS]; +extern vec3 fog_color; +extern float fog_strength; + extern glm::vec3 cameraPosition; extern glm::vec3 cameraLookAt; extern glm::vec3 cameraUpward;