controls for fog to select params
authorEleni Maria Stea <estea@igalia.com>
Tue, 22 Aug 2017 15:27:52 +0000 (18:27 +0300)
committerEleni Maria Stea <estea@igalia.com>
Tue, 22 Aug 2017 15:27:52 +0000 (18:27 +0300)
gl_shaders/default.f.glsl
src/main.cc
src/morph_renderer.cc
src/opengl/opengl.cc
src/renderer.cc
src/renderer.h

index 17d4353..88f0d69 100644 (file)
@@ -11,7 +11,8 @@ varying vec3 normal;
 varying vec3 ldir;
 varying vec2 tex_coord;
 
-const float fog_density = 0.005;
+// const float fog_density = 0.005;
+uniform float fog_density;
 const vec4 sky_color = vec4(0.35, 0.5, 0.65, 1.0);
 
 out vec4 color;
index 1246d2f..c48b383 100644 (file)
@@ -58,6 +58,8 @@ static Vec3 cam_pos;
 static float aspect;
 static OrbitCamera *camera;
 
+static float fog_density;
+
 static Scene *cow_scene;
 static Object *cow_object;
 static MorphRenderer *cow_rend;
@@ -119,6 +121,8 @@ static bool init(Gfx_API api)
        if(!gfx_init(api))
                return false;
 
+       fog_density = 0.0037;
+
        sdr_man = new ShaderManager;
 
        camera = new OrbitCamera;
@@ -223,6 +227,14 @@ static void clbk_key(GLFWwindow *win, int key, int scancode, int action, int mod
                        move_camera = !move_camera;
                        break;
 
+               case 'F':
+                       fog_density = fog_density < 1 - 0.0009 ? fog_density + 0.0001 : 1;
+                       break;
+
+               case 'U':
+                       fog_density = fog_density > 0.0001 ? fog_density - 0.0001 : 0;
+                       break;
+
                default:
                        break;
                }
@@ -312,6 +324,8 @@ static void display()
 
        gfx_clear(0.1, 0.1, 0.1);
 
+       printf("fog_density: %f\n", fog_density);
+       terrain_rend->fog_density = fog_density;
        terrain_rend->draw();
 
        cow_pos.y = terrain.get_height(cow_pos);
index ae91625..42d920d 100644 (file)
@@ -13,6 +13,8 @@ MorphRenderer::MorphRenderer()
        /* we won't use them */
        skytex = 0;
        dskytex = 0;
+
+       fog_density = 0;
 }
 
 MorphRenderer::~MorphRenderer()
index 367e283..844b3ac 100644 (file)
@@ -41,6 +41,7 @@ bool init_opengl()
        gfx_zbuffer = zbuffer;
        gfx_cull_face = cull_face;
 
+       // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
        return true;
 }
 
index e383efa..b4decc4 100644 (file)
@@ -30,6 +30,8 @@ Renderer::Renderer()
 
        skytex = 0;
        dskytex = 0;
+
+       fog_density = 0;
 }
 
 Renderer::~Renderer()
@@ -52,6 +54,7 @@ bool Renderer::create()
        diff_loc = sprog->get_uniform_location("diffuse");
        spec_loc = sprog->get_uniform_location("specular");
        shin_loc = sprog->get_uniform_location("shininess");
+       fog_loc = sprog->get_uniform_location("fog_density");
 
        /* uniform locations for matrices */
 
@@ -95,6 +98,9 @@ void Renderer::draw_object(Object *object) const
        if(shin_loc != -1)
                sprog->set_uniformf(shin_loc, m->shininess);
 
+       if(fog_loc != -1)
+               sprog->set_uniformf(fog_loc, fog_density);
+
        /* texture */
 
        if(m->dtex)
index a14d69c..e484767 100644 (file)
@@ -14,6 +14,7 @@ protected:
        int shin_loc;
        int mmviewproj_loc;
        int mview_loc;
+       int fog_loc;
 
        ShaderProgram *sprog;
 
@@ -26,6 +27,8 @@ protected:
        virtual void draw_skybox() const;
 
 public:
+       float fog_density;
+
        Scene *scene;
        OrbitCamera *camera;