3 uniform mat4 projection_matrix;
4 uniform mat4 modelview_matrix;
5 uniform vec4 current_color;
8 uniform bool lightsOn[8];
9 uniform vec4 lightsPos[8];
11 uniform vec3 lightsDiffuse[8];
12 uniform vec3 lightsAmbient[8];
13 uniform vec3 lightsSpecular[8];
15 uniform vec3 globalAmbient;
16 uniform bool lightingOn;
19 uniform bool perVertexColor;
20 uniform vec3 matDiffuse;
21 uniform vec3 matAmbient;
22 uniform vec3 matSpecular;
23 uniform vec3 matEmissive;
24 uniform float matOpacity;
25 uniform float matPower;
26 uniform bool matTwoSided;
30 uniform float fogDensity;
31 uniform vec3 fogColor;
45 vec3 n = normalize(mat3x3(modelview_matrix) * normal);
46 vec4 pos = modelview_matrix * vec4(vertex, 1.0);
48 gl_Position = projection_matrix * pos;
52 f = clamp(exp(fogDensity * pos.z), 0, 1);
57 vec3 diffuseColor = perVertexColor ? color.xyz : matDiffuse;
58 vec3 ambientColor = perVertexColor ? color.xyz : matAmbient;
59 float opacity = perVertexColor ? color.w : matOpacity;
62 // vec3 ecPosition3 = vec3(gl_Position) / gl_Position.w;
63 vec3 eye = vec3(0.0, 0.0, 1.0);
68 for(i = 0; i < 8; i++)
71 vec4 l = lightsPos[i];
72 float d = dot(n, l.xyz);
80 halfVector = normalize(VP + eye);
81 nDotVP = max(0, dot(n, VP));
84 float nDotHV = max(0.0, dot(n, halfVector));
85 pf = pow(nDotHV, matPower);
89 c += diffuseColor * min(1, max(0, d)) * lightsDiffuse[i];
90 c += matSpecular * pf * lightsSpecular[i];
91 c += matAmbient * lightsAmbient[i];
96 float d2 = dot(iN, l.xyz);
99 float nDotVP = max(0, dot(iN, VP));
102 float nDotHV = max(0.0, dot(iN, halfVector));
103 pf = pow(nDotHV, matPower);
107 c2 += diffuseColor * min(1, max(0, d2)) * lightsDiffuse[i];
108 c2 += matSpecular * pf * lightsSpecular[i];
109 c2 += matAmbient * lightsAmbient[i];
113 c += ambientColor * globalAmbient;
115 fColor = vec4(c, opacity);
118 fColor = f * fColor + (1-f) * vec4(fogColor, 1);
122 c2 += ambientColor * globalAmbient;
124 fColorBack = vec4(c2, opacity);
127 fColorBack = f * fColorBack + (1-f) * vec4(fogColor, 1);
132 fColor = current_color * color;
135 fColor = f * fColor + (1-f) * vec4(fogColor, 1);