diff options
Diffstat (limited to 'assets/shaders/test_fshader_full.glsl')
-rwxr-xr-x | assets/shaders/test_fshader_full.glsl | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/assets/shaders/test_fshader_full.glsl b/assets/shaders/test_fshader_full.glsl index ae7d45b2..ab1bee7a 100755 --- a/assets/shaders/test_fshader_full.glsl +++ b/assets/shaders/test_fshader_full.glsl | |||
@@ -1,24 +1,25 @@ | |||
1 | /* <copyright> | 1 | /* <copyright> |
2 | Copyright (c) 2012, Motorola Mobility, Inc | 2 | Copyright (c) 2012, Motorola Mobility LLC. |
3 | All Rights Reserved. | 3 | All Rights Reserved. |
4 | BSD License. | ||
5 | 4 | ||
6 | Redistribution and use in source and binary forms, with or without | 5 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met: | 6 | modification, are permitted provided that the following conditions are met: |
8 | 7 | ||
9 | - Redistributions of source code must retain the above copyright notice, | 8 | * Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. | 9 | this list of conditions and the following disclaimer. |
11 | - Redistributions in binary form must reproduce the above copyright | 10 | |
12 | notice, this list of conditions and the following disclaimer in the | 11 | * Redistributions in binary form must reproduce the above copyright notice, |
13 | documentation and/or other materials provided with the distribution. | 12 | this list of conditions and the following disclaimer in the documentation |
14 | - Neither the name of Motorola Mobility nor the names of its contributors | 13 | and/or other materials provided with the distribution. |
15 | may be used to endorse or promote products derived from this software | 14 | |
16 | without specific prior written permission. | 15 | * Neither the name of Motorola Mobility LLC nor the names of its |
16 | contributors may be used to endorse or promote products derived from this | ||
17 | software without specific prior written permission. | ||
17 | 18 | ||
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 22 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 23 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 24 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 25 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
@@ -41,7 +42,7 @@ uniform vec4 u_lightAmb; | |||
41 | // diffuse map | 42 | // diffuse map |
42 | uniform sampler2D colMap; | 43 | uniform sampler2D colMap; |
43 | 44 | ||
44 | // environment map | 45 | // environment map |
45 | uniform sampler2D envMap; | 46 | uniform sampler2D envMap; |
46 | 47 | ||
47 | // normal map | 48 | // normal map |
@@ -62,45 +63,45 @@ varying vec3 vEyePos; | |||
62 | 63 | ||
63 | void main() | 64 | void main() |
64 | { | 65 | { |
65 | vec4 colMapTexel = vec4(texture2D(colMap, vec2(vNormal.w, vECPos.w)).rgb, 1.0); | 66 | vec4 colMapTexel = vec4(texture2D(colMap, vec2(vNormal.w, 1.0 - vECPos.w)).rgb, 1.0); |
66 | 67 | ||
67 | // normal mapping | 68 | // normal mapping |
68 | vec3 normal = normalize(vNormal.xyz); | 69 | vec3 normal = normalize(vNormal.xyz); |
69 | vec3 mapNormal = texture2D(normalMap, vec2(vNormal.w, vECPos.w)).xyz * 2.0 - 1.0; | 70 | vec3 mapNormal = texture2D(normalMap, vec2(vNormal.w, vECPos.w)).xyz * 2.0 - 1.0; |
70 | mapNormal = normalize(mapNormal.x*vec3(normal.z, 0.0, -normal.x) + vec3(0.0, mapNormal.y, 0.0) + mapNormal.z*normal); | 71 | mapNormal = normalize(mapNormal.x*vec3(normal.z, 0.0, -normal.x) + vec3(0.0, mapNormal.y, 0.0) + mapNormal.z*normal); |
71 | 72 | ||
72 | // create envmap coordinates | 73 | // create envmap coordinates |
73 | vec3 r = reflect( normalize(vec3(vECPos.xyz - vEyePos.xyz)), mapNormal); | 74 | vec3 r = reflect( normalize(vec3(vECPos.xyz - vEyePos.xyz)), mapNormal); |
74 | float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + r.z*r.z ); | 75 | float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + r.z*r.z ); |
75 | 76 | ||
76 | // calculate environment map texel | 77 | // calculate environment map texel |
77 | vec4 envMapTexel = vec4(texture2D(envMap, vec2(r.x/m + 0.5, r.y/m + 0.5)).rgb, 0.0); | 78 | vec4 envMapTexel = vec4(texture2D(envMap, vec2(r.x/m + 0.5, r.y/m + 0.5)).rgb, 0.0); |
78 | 79 | ||
79 | // lighting | 80 | // lighting |
80 | vec3 lightDirection = u_lightPos - vECPos.xyz; | 81 | vec3 lightDirection = u_lightPos - vECPos.xyz; |
81 | float lightDist = length(lightDirection); | 82 | float lightDist = length(lightDirection); |
82 | lightDirection /= lightDist; | 83 | lightDirection /= lightDist; |
83 | 84 | ||
84 | float attenuation = clamp(1.0 - lightDist * 0.01, 0.0, 1.0); | 85 | float attenuation = clamp(1.0 - lightDist * 0.01, 0.0, 1.0); |
85 | 86 | ||
86 | vec3 halfVec = normalize(lightDirection + vEyePos); | 87 | vec3 halfVec = normalize(lightDirection + vEyePos); |
87 | 88 | ||
88 | float diffuseIntensity = max(0.0, dot(mapNormal, lightDirection)); | 89 | float diffuseIntensity = max(0.0, dot(mapNormal, lightDirection)); |
89 | float specularModifier = max(0.0, dot(mapNormal, halfVec)); | 90 | float specularModifier = max(0.0, dot(mapNormal, halfVec)); |
90 | 91 | ||
91 | float pf; | 92 | float pf; |
92 | if(diffuseIntensity == 0.0) | 93 | if(diffuseIntensity == 0.0) |
93 | pf = 0.0; | 94 | pf = 0.0; |
94 | else | 95 | else |
95 | pf = pow(specularModifier, 76.0); | 96 | pf = pow(specularModifier, 76.0); |
96 | 97 | ||
97 | vec4 ambient = u_matAmbient * u_lightAmb; | 98 | vec4 ambient = u_matAmbient * u_lightAmb; |
98 | vec4 diffuse = u_matDiffuse * (colMapTexel + envMapTexel); | 99 | vec4 diffuse = u_matDiffuse * (colMapTexel + envMapTexel); |
99 | 100 | ||
100 | if (u_renderGlow <= 0.5) | 101 | if (u_renderGlow <= 0.5) |
101 | diffuse *= u_lightDiff * diffuseIntensity * attenuation; | 102 | diffuse *= u_lightDiff * diffuseIntensity * attenuation; |
102 | 103 | ||
103 | vec4 specular = 2.0 * pf * envMapTexel; | 104 | vec4 specular = 2.0 * pf * envMapTexel; |
104 | 105 | ||
105 | gl_FragColor = (colMapTexel*(ambient + diffuse)) + specular + vec4(0.0,0.0,0.0,1.0); | 106 | gl_FragColor = (colMapTexel*(ambient + diffuse)) + specular + vec4(0.0,0.0,0.0,1.0); |
106 | } | 107 | } |