Im Vertex-Shader werden die Vertices anhand eines Graustufenmaps entlang der Normalen verschoben.
vec3 Normal;
vec3 EyeDir;
vec4 EyePos;
varying float LightIntensity;
varying vec2 UVCoord;
uniform vec3 LightPosition;
uniform float DisplacementFactor;
uniform float OffsetFactor;
uniform sampler2D tex1;
void main(void) {
float average = texture2D(tex1,gl_MultiTexCoord0.st).r;
average += texture2D(tex1,gl_MultiTexCoord0.st).g;
average += texture2D(tex1,gl_MultiTexCoord0.st).b;
average /= 3.0;
vec3 position = normalize(gl_Normal) * (average * DisplacementFactor - OffsetFactor);
vec4 thisVert = vec4(gl_Vertex.xyz+position,1.0);
UVCoord = gl_MultiTexCoord0.st;
gl_Position = gl_ModelViewProjectionMatrix * thisVert;
//light
Normal = normalize(gl_NormalMatrix * gl_Normal);
vec4 pos = gl_ModelViewMatrix * thisVert;
EyeDir = pos.xyz;
EyePos = gl_ModelViewProjectionMatrix * thisVert;
LightIntensity = max(dot(normalize(LightPosition - EyeDir), Normal), 0.0);
//end light
}
varying float LightIntensity;
varying vec2 UVCoord;
uniform sampler2D tex1;
void main(){
gl_FragColor = vec4(vec3(texture2D(tex1,UVCoord))*LightIntensity, 1.0);
}