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;
static float aspect;
static OrbitCamera *camera;
+static float fog_density;
+
static Scene *cow_scene;
static Object *cow_object;
static MorphRenderer *cow_rend;
if(!gfx_init(api))
return false;
+ fog_density = 0.0037;
+
sdr_man = new ShaderManager;
camera = new OrbitCamera;
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;
}
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);
/* we won't use them */
skytex = 0;
dskytex = 0;
+
+ fog_density = 0;
}
MorphRenderer::~MorphRenderer()
gfx_zbuffer = zbuffer;
gfx_cull_face = cull_face;
+ // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
return true;
}
skytex = 0;
dskytex = 0;
+
+ fog_density = 0;
}
Renderer::~Renderer()
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 */
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)
int shin_loc;
int mmviewproj_loc;
int mview_loc;
+ int fog_loc;
ShaderProgram *sprog;
virtual void draw_skybox() const;
public:
+ float fog_density;
+
Scene *scene;
OrbitCamera *camera;