From 3817acdb49d775edb23fafbed70095be8f648ed6 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Sat, 9 Apr 2011 20:22:13 +0200 Subject: Terrain multitexturing. --- shaders/terrain_fragment.glsl | 22 ++++++++++++++++++++++ shaders/terrain_vertex.glsl | 15 +++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 shaders/terrain_fragment.glsl create mode 100644 shaders/terrain_vertex.glsl (limited to 'shaders') diff --git a/shaders/terrain_fragment.glsl b/shaders/terrain_fragment.glsl new file mode 100644 index 0000000..78417af --- /dev/null +++ b/shaders/terrain_fragment.glsl @@ -0,0 +1,22 @@ +#version 120 + +varying vec3 normal, light_pos; +varying float y; + +uniform sampler2D tex[3]; + +void main() { + vec3 n = normalize(normal); + float diffuse = max(dot(n, light_pos), 0.0); + + float f1 = clamp((y-15.0) / 3.0, 0.0, 1.0); + float f2 = clamp((y-2) / 3.0, 0.0, 1.0); + + vec4 t0 = texture2D(tex[0], gl_TexCoord[0].st); + vec4 t1 = texture2D(tex[1], gl_TexCoord[0].st); + vec4 t2 = texture2D(tex[2], gl_TexCoord[0].st); + + gl_FragColor = mix(mix(t2, t0, f2), t1, f1) * diffuse; +} + +/* vim: set syn=glsl: */ diff --git a/shaders/terrain_vertex.glsl b/shaders/terrain_vertex.glsl new file mode 100644 index 0000000..e53c432 --- /dev/null +++ b/shaders/terrain_vertex.glsl @@ -0,0 +1,15 @@ +#version 120 + +varying vec3 normal, light_pos; +varying float y; + +void main() { + normal = gl_Normal; + light_pos = vec3(0, 1, 0); + y = gl_Vertex.y; + + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +/* vim: set syn=glsl: */ -- cgit v1.2.3