From c710dee00c80b2cf95821b2a0382c72450c20a3f Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 22 May 2011 22:59:01 -0400 Subject: [PATCH] add textured object shader; update names --- shaders/{wfobj.f.glsl => obj.fp} | 0 shaders/{wfobj.v.glsl => obj.vp} | 0 shaders/obj_tex.fp | 41 ++++++++++++++++++++++++++++++++ shaders/obj_tex.vp | 16 +++++++++++++ 4 files changed, 57 insertions(+) rename shaders/{wfobj.f.glsl => obj.fp} (100%) rename shaders/{wfobj.v.glsl => obj.vp} (100%) create mode 100644 shaders/obj_tex.fp create mode 100644 shaders/obj_tex.vp diff --git a/shaders/wfobj.f.glsl b/shaders/obj.fp similarity index 100% rename from shaders/wfobj.f.glsl rename to shaders/obj.fp diff --git a/shaders/wfobj.v.glsl b/shaders/obj.vp similarity index 100% rename from shaders/wfobj.v.glsl rename to shaders/obj.vp diff --git a/shaders/obj_tex.fp b/shaders/obj_tex.fp new file mode 100644 index 0000000..d07f348 --- /dev/null +++ b/shaders/obj_tex.fp @@ -0,0 +1,41 @@ + +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif + +uniform vec4 ambient, specular; +uniform float shininess; +uniform sampler2D tex; + +varying vec3 pos_i; +varying vec3 normal_i; +varying vec2 tex_coord_i; + +void main(void) +{ + vec3 n, lightDir; + vec4 color; + float NdotL, RdotEye; + + lightDir = normalize(vec3(-0.1, 0, -0.9)); + color = vec4(0.2, 0.2, 0.2, 1.0) * ambient; /* ambient light */ + n = normalize(normal_i); + + NdotL = max(dot(n, -lightDir), 0.0); + + if (NdotL > 0.0) + { + /* diffuse component */ + color += texture2D(tex, tex_coord_i) * NdotL; + /* specular component */ + RdotEye = dot(normalize(-pos_i), normalize(reflect(-lightDir, n))); + if (RdotEye > 0.0) + { + color += clamp(specular * pow(RdotEye, shininess), 0.0, 1.0); + } + } + + gl_FragColor = color; +} diff --git a/shaders/obj_tex.vp b/shaders/obj_tex.vp new file mode 100644 index 0000000..9be4096 --- /dev/null +++ b/shaders/obj_tex.vp @@ -0,0 +1,16 @@ + +attribute vec3 pos; +attribute vec3 normal; +attribute vec2 tex_coord; + +varying vec3 pos_i; +varying vec3 normal_i; +varying vec2 tex_coord_i; + +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * vec4(pos, 1); + pos_i = gl_Position.xyz; + tex_coord_i = tex_coord; + normal_i = gl_NormalMatrix * normal; +}