Displacement
Im Vertex-Shader werden die Vertices anhand eines Graustufenmaps entlang der Normalen verschoben.
Screenshot:
Vertex Shader:
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 offset = average * DisplacementFactor - OffsetFactor; vec3 position = normalize(gl_Normal) * offset; 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 }
Fragment Shader:
varying float LightIntensity; varying vec2 UVCoord; uniform sampler2D tex1; void main(){ gl_FragColor = vec4(vec3(texture2D(tex1,UVCoord))*LightIntensity, 1.0); }