1 | #version 120 |
---|
2 | |
---|
3 | uniform vec4 lightDiffuse; |
---|
4 | uniform vec4 lightSpecular; |
---|
5 | uniform vec4 scaleBias; |
---|
6 | uniform float exponent; |
---|
7 | uniform sampler2D normalHeightMap; |
---|
8 | |
---|
9 | varying vec3 tangentEyeDir; |
---|
10 | varying vec3 tangentLightDir[2]; |
---|
11 | varying vec4 shadowUV[2]; |
---|
12 | varying vec4 oUv0; |
---|
13 | |
---|
14 | vec4 lit(float NdotL, float NdotH, float m) { |
---|
15 | |
---|
16 | float ambient = 1.0; |
---|
17 | float diffuse = max(NdotL, 0.0); |
---|
18 | float specular = step(0.0, NdotL) * max(NdotH * m, 0.0); |
---|
19 | |
---|
20 | return vec4(ambient, diffuse, specular, 1.0); |
---|
21 | } |
---|
22 | |
---|
23 | vec3 expand(vec3 v) |
---|
24 | { |
---|
25 | return (v - 0.5) * 2.0; |
---|
26 | } |
---|
27 | |
---|
28 | /* |
---|
29 | Pixel Shader for doing bump mapping with parallax plus diffuse and specular lighting by masterfalcon |
---|
30 | */ |
---|
31 | void main() |
---|
32 | { |
---|
33 | float height = texture2D(normalHeightMap, oUv0.xy).a; |
---|
34 | float displacement = (height * scaleBias.x) + scaleBias.y; |
---|
35 | vec2 newTexCoord = ((tangentEyeDir * displacement) + oUv0.xyz).xy; |
---|
36 | vec3 bumpVec = expand(texture2D(normalHeightMap, newTexCoord).xyz); |
---|
37 | vec3 N = normalize(bumpVec); |
---|
38 | |
---|
39 | vec3 halfAngle = normalize(tangentEyeDir + tangentLightDir[0]); |
---|
40 | float NdotL = dot(normalize(tangentLightDir[0]), N); |
---|
41 | float NdotH = dot(normalize(halfAngle), N); |
---|
42 | |
---|
43 | vec4 Lit = lit(NdotL, NdotH, exponent); |
---|
44 | |
---|
45 | gl_FragColor = lightDiffuse * Lit.y + lightSpecular * Lit.z; |
---|
46 | } |
---|