Add fog events to the day-night cycle
This commit is contained in:
parent
d73da5b2a1
commit
349a7934c4
|
@ -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
|
|
@ -165,7 +165,7 @@ void main() {
|
||||||
c.rgb += backlight_color * clamp((dot(normalize(vertex), nnormal) + backlight_strength) / backlight_strength, 0, 1);
|
c.rgb += backlight_color * clamp((dot(normalize(vertex), nnormal) + backlight_strength) / backlight_strength, 0, 1);
|
||||||
|
|
||||||
float fog = linearDepth()/1500;
|
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;
|
color_out = c;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,10 +30,6 @@ sf::SoundBuffer* buffer;
|
||||||
Gloom::Shader* current_shader = nullptr;
|
Gloom::Shader* current_shader = nullptr;
|
||||||
Gloom::Shader* prev_shader = nullptr; // The last shader to glDrawElements
|
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
|
// the framebuffer we render the scene to before post-processing
|
||||||
GLuint framebufferID = 0;
|
GLuint framebufferID = 0;
|
||||||
GLuint framebufferTextureID = 0;
|
GLuint framebufferTextureID = 0;
|
||||||
|
|
|
@ -30,6 +30,9 @@ vec3 cameraPosition = vec3(420, -120, 190);
|
||||||
vec3 cameraLookAt = vec3(460, 220, 0);
|
vec3 cameraLookAt = vec3(460, 220, 0);
|
||||||
vec3 cameraUpward = vec3(0, 0, 1);
|
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_GRASS = 150;
|
||||||
const size_t N_TREES = 30;
|
const size_t N_TREES = 30;
|
||||||
const size_t DISPLACEMENT = 30;
|
const size_t DISPLACEMENT = 30;
|
||||||
|
@ -252,19 +255,20 @@ void step_scene(double timeDelta) {
|
||||||
|
|
||||||
// time of day events
|
// 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<seq_t> sequence = {
|
static const vector<seq_t> sequence = {
|
||||||
{ 0, 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
|
||||||
{ 9, vec3(0.4 , 0.4 , 0.8), vec3(0.15, 0.15, 0.35), 1}, // dusk
|
{ 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
|
||||||
{10, vec3(1.0 , 0.6 , 0.4), vec3(0.8 , 0.4 , 0.2 ), 1}, // sunrise
|
{ 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
|
||||||
{11, vec3(0.9 , 0.7 , 0.5), vec3(0.8 , 0.6 , 0.2 ), 1}, // sunrise2
|
{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
|
||||||
{12, vec3(0.85, 0.85, 0.9), vec3(0.3 , 0.5 , 0.8 ), 0}, // morning
|
{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
|
||||||
{18, vec3(1.0 , 1.0 , 1.0), vec3(0.35, 0.6 , 0.9 ), 0}, // noon
|
{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
|
||||||
{24, vec3(0.7 , 0.9 , 1.0), vec3(0.3 , 0.5 , 0.8 ), 0}, // evening
|
{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
|
||||||
{25, vec3(0.9 , 0.7 , 0.5), vec3(0.8 , 0.6 , 0.2 ), 0}, // sundown
|
{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
|
||||||
{26, vec3(1.0 , 0.6 , 0.4), vec3(0.8 , 0.4 , 0.2 ), 1}, // sunset
|
{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
|
||||||
{27, vec3(0.5 , 0.5 , 0.8), vec3(0.35, 0.15, 0.35), 1}, // dusk
|
{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
|
||||||
{36, vec3(0.2 , 0.2 , 0.7), vec3(0.05, 0.1 , 0.15), 1}, // night
|
{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().light_c == sequence.back().light_c);
|
||||||
assert(sequence.front().bg_c == sequence.back().bg_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 const size_t seq_size = sequence.size();
|
||||||
static size_t /*current*/ seq_pos = 0;
|
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)
|
while (sequence[(seq_pos+1) % seq_size].t < t || sequence[seq_pos].t > t)
|
||||||
seq_pos = (seq_pos+1) % seq_size;
|
seq_pos = (seq_pos+1) % seq_size;
|
||||||
const seq_t& seq_a = sequence[seq_pos];
|
const seq_t& seq_a = sequence[seq_pos];
|
||||||
const seq_t& seq_b = sequence[(seq_pos+1) % seq_size];
|
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);
|
glClearColor(bg_color.r, bg_color.g, bg_color.b, 1.0f);
|
||||||
|
|
||||||
/*interpolation */f/*actor*/ = t/t_max;
|
/*interpolation */f/*actor*/ = t/t_max;
|
||||||
|
|
|
@ -9,6 +9,9 @@ extern SceneNode* rootNode;
|
||||||
extern SceneNode* hudNode;
|
extern SceneNode* hudNode;
|
||||||
extern SceneNode* lightNode[N_LIGHTS];
|
extern SceneNode* lightNode[N_LIGHTS];
|
||||||
|
|
||||||
|
extern vec3 fog_color;
|
||||||
|
extern float fog_strength;
|
||||||
|
|
||||||
extern glm::vec3 cameraPosition;
|
extern glm::vec3 cameraPosition;
|
||||||
extern glm::vec3 cameraLookAt;
|
extern glm::vec3 cameraLookAt;
|
||||||
extern glm::vec3 cameraUpward;
|
extern glm::vec3 cameraUpward;
|
||||||
|
|
Loading…
Reference in New Issue