summaryrefslogtreecommitdiff
path: root/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'shaders')
-rw-r--r--shaders/fog_fragment.glsl9
-rw-r--r--shaders/terrain_fragment.glsl7
-rw-r--r--shaders/tree_fragment.glsl22
-rw-r--r--shaders/tree_vertex.glsl14
4 files changed, 49 insertions, 3 deletions
diff --git a/shaders/fog_fragment.glsl b/shaders/fog_fragment.glsl
new file mode 100644
index 0000000..90b4591
--- /dev/null
+++ b/shaders/fog_fragment.glsl
@@ -0,0 +1,9 @@
+#version 120
+
+void foggify(vec3 player_pos, vec3 pos) {
+ gl_FragColor = mix(gl_FragColor, gl_Fog.color, pow(length(player_pos - pos)/100, 5));
+ if(player_pos.y < 30 - 1.7)
+ gl_FragColor = mix(gl_FragColor, vec4(0, .3, .8, 0), .7);
+}
+
+/* vim: set syn=glsl: */
diff --git a/shaders/terrain_fragment.glsl b/shaders/terrain_fragment.glsl
index 8b966fd..d1f5892 100644
--- a/shaders/terrain_fragment.glsl
+++ b/shaders/terrain_fragment.glsl
@@ -7,6 +7,8 @@ uniform sampler2D marktex;
uniform vec3 selpos, player_pos;
uniform bool show_sel;
+void foggify(vec3 player_pos, vec3 pos);
+
void main() {
vec3 n = normalize(normal);
float diffuse = max(dot(n, light_pos), 0.5);
@@ -27,9 +29,8 @@ void main() {
vec2 st = vec2((pos.x + 1 - selpos.x) / 2, (pos.z + 1 - selpos.z) / 2);
gl_FragColor += texture2D(marktex, st);
}
- gl_FragColor = mix(gl_FragColor, gl_Fog.color, pow(length(player_pos - pos)/100, 5));
- if(player_pos.y < 30 - 1.7)
- gl_FragColor = mix(gl_FragColor, vec4(0, .3, .8, 0), .7);
+
+ foggify(player_pos, pos);
}
/* vim: set syn=glsl: */
diff --git a/shaders/tree_fragment.glsl b/shaders/tree_fragment.glsl
new file mode 100644
index 0000000..382ab4e
--- /dev/null
+++ b/shaders/tree_fragment.glsl
@@ -0,0 +1,22 @@
+#version 120
+
+uniform sampler2D tex;
+uniform vec3 player_pos;
+varying vec3 normal, pos;
+
+void foggify(vec3 player_pos, vec3 pos);
+
+void main() {
+ vec4 color = texture2D(tex, gl_TexCoord[0].st);
+
+ if(color.a < 0.7)
+ discard;
+
+ gl_FragColor = color;
+ float n = clamp(dot(normal, vec3(0, 0, 1)) + .5, .3, 1);
+ gl_FragColor.rgb *= n;
+
+ foggify(player_pos, pos);
+}
+
+/* vim: set syn=glsl: */
diff --git a/shaders/tree_vertex.glsl b/shaders/tree_vertex.glsl
new file mode 100644
index 0000000..4c06bee
--- /dev/null
+++ b/shaders/tree_vertex.glsl
@@ -0,0 +1,14 @@
+#version 120
+
+uniform vec3 tree_pos;
+varying vec3 normal, pos;
+
+void main() {
+ normal = gl_Normal;
+ pos = gl_Vertex.xyz + tree_pos;
+
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+}
+
+/* vim: set syn=glsl: */