From: Eleni Maria Stea Date: Tue, 22 Aug 2017 15:27:52 +0000 (+0300) Subject: controls for fog to select params X-Git-Url: http://git.mutantstargoat.com?p=demo;a=commitdiff_plain;h=c99060df01719b24ebd793b149d3c2dc5748cad5 controls for fog to select params --- diff --git a/gl_shaders/default.f.glsl b/gl_shaders/default.f.glsl index 17d4353..88f0d69 100644 --- a/gl_shaders/default.f.glsl +++ b/gl_shaders/default.f.glsl @@ -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; diff --git a/src/main.cc b/src/main.cc index 1246d2f..c48b383 100644 --- a/src/main.cc +++ b/src/main.cc @@ -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); diff --git a/src/morph_renderer.cc b/src/morph_renderer.cc index ae91625..42d920d 100644 --- a/src/morph_renderer.cc +++ b/src/morph_renderer.cc @@ -13,6 +13,8 @@ MorphRenderer::MorphRenderer() /* we won't use them */ skytex = 0; dskytex = 0; + + fog_density = 0; } MorphRenderer::~MorphRenderer() diff --git a/src/opengl/opengl.cc b/src/opengl/opengl.cc index 367e283..844b3ac 100644 --- a/src/opengl/opengl.cc +++ b/src/opengl/opengl.cc @@ -41,6 +41,7 @@ bool init_opengl() gfx_zbuffer = zbuffer; gfx_cull_face = cull_face; + // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); return true; } diff --git a/src/renderer.cc b/src/renderer.cc index e383efa..b4decc4 100644 --- a/src/renderer.cc +++ b/src/renderer.cc @@ -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) diff --git a/src/renderer.h b/src/renderer.h index a14d69c..e484767 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -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;