summary refs log tree commit diff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2023-06-29 22:54:17 +0200
committerMel <einebeere@gmail.com>2023-06-29 22:54:17 +0200
commit6d61b17c4289185d59d37caae8070a40e91fba40 (patch)
treeb423dbb786566ee3f1bafa7684fb673df20c2d71
parent52732d71e72b02ff45e25f44e414f87ec9ab7666 (diff)
downloadmeowcraft-6d61b17c4289185d59d37caae8070a40e91fba40.tar.zst
meowcraft-6d61b17c4289185d59d37caae8070a40e91fba40.zip
Add fog
-rw-r--r--assets/shaders/fragment.glsl4
-rw-r--r--assets/shaders/vertex.glsl9
-rw-r--r--src/main.cpp8
3 files changed, 16 insertions, 5 deletions
diff --git a/assets/shaders/fragment.glsl b/assets/shaders/fragment.glsl
index eca50d9..71435ef 100644
--- a/assets/shaders/fragment.glsl
+++ b/assets/shaders/fragment.glsl
@@ -2,9 +2,11 @@
 
 uniform sampler2D tex;
 uniform vec3 sun_direction;
+uniform vec3 sky_color;
 
 in vec3 surface_normal;
 in vec2 frag_tex_coord;
+in float depth;
 
 out vec4 color;
 
@@ -13,5 +15,5 @@ void main() {
     vec3 diffuse = vec3(max(brightness, 0.3));
 
     color = vec4(diffuse, 1.0) * texture(tex, frag_tex_coord);
-    // color = texture(tex, frag_tex_coord);
+    color = mix(vec4(sky_color, 1.0), color, 1 - depth);
 }
\ No newline at end of file
diff --git a/assets/shaders/vertex.glsl b/assets/shaders/vertex.glsl
index c59d6cd..3ca1055 100644
--- a/assets/shaders/vertex.glsl
+++ b/assets/shaders/vertex.glsl
@@ -10,10 +10,15 @@ layout (location = 2) in vec2 tex_coord;
 
 out vec2 frag_tex_coord;
 out vec3 surface_normal;
+out float depth;
 
 void main() {
-    gl_Position = projection_matrix * view_matrix * model_matrix * vec4(position, 1.0);
-    frag_tex_coord = tex_coord;
+    vec4 world_position = model_matrix * vec4(position, 1.0);
+    vec4 view_position = view_matrix * world_position;
+    vec4 clip_position = projection_matrix * view_position;
 
+    gl_Position = clip_position;
+    frag_tex_coord = tex_coord;
     surface_normal = (model_matrix * vec4(normal, 0.0)).xyz;
+    depth = clamp((length(view_position) - 75) / 125, 0.0, 1.0);
 }
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index b407a78..b0939c1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -55,7 +55,7 @@ void run() {
     MC::World::World world;
 
     MC::GFX::Camera camera{};
-    camera.set_position({0.0f, 50.0f, 0.0f});
+    camera.set_position({0.0f, MC::World::Chunk::Height / 2.0f, 0.0f});
 
     MC::GFX::Shading::Program program(
         MC::GFX::Shading::Shader::create_vertex(),
@@ -66,6 +66,7 @@ void run() {
     auto view_uniform = program.uniform("view_matrix");
     auto projection_uniform = program.uniform("projection_matrix");
     auto sun_direction_uniform = program.uniform("sun_direction");
+    auto sky_color_uniform = program.uniform("sky_color");
 
     program.bind();
     auto projection = Math::MVP::perspective_projection(ASPECT, FOV, 0.1f, 1000.0f);
@@ -74,6 +75,9 @@ void run() {
     Vector<3> sun_direction{1.0f, -1.0f, 0.0f};
     sun_direction_uniform.set(sun_direction);
 
+    Vector<3> sky_color{0.85f, 0.85f, 0.85f}; // #DBDBDB
+    sky_color_uniform.set(sky_color);
+
     glEnable(GL_DEPTH_TEST);
     glDepthFunc(GL_LEQUAL);
 
@@ -96,7 +100,7 @@ void run() {
         auto view = Math::MVP::view(camera.position(), camera.angles());
         view_uniform.set(view);
 
-        glClearColor(0.85f, 0.85f, 0.85f, 1.0f); // #DBDBDB
+        glClearColor(sky_color.x(), sky_color.y(), sky_color.z(), 1.0f); // #DBDBDB
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         for (auto& chunk : world.get_visible_chunks(camera.position())) {
             auto model = Math::MVP::model(chunk.chunk.value().position(), {});