View difference between Paste ID: sgwBatnw and 3zu0S5uT
SHOW: | | - or go back to the newest paste.
1-
Vertex Shader:
1+
//Vertex Shader:
2
#version 120
3
4
attribute vec3 aVertexPos;
5
attribute vec2 aVertexTex;
6
attribute vec3 aVertexNorm;
7
8
uniform mat4 uVMatrix;
9
uniform mat4 uTMatrix;
10
uniform mat4 uPMatrix;
11
uniform vec3 uLightColor[5];
12
uniform vec3 uLightPos[5];
13
uniform vec3 uLightAtt[5];
14
15
varying vec3 vSurfaceNorm;
16
varying vec3 vLightVector[5];
17
varying vec3 vLightColor[5];
18
varying vec3 vLightAtt[5];
19
varying vec2 vVertexTex;
20
21
void main(){
22
    vec4 lWorldPos = uTMatrix * vec4(aVertexPos, 1.0);
23
    gl_Position = uPMatrix * uVMatrix * lWorldPos;
24
    
25
    for(int i = 0; i < 5; i++){
26
        vLightVector[i] = uLightPos[i] - lWorldPos.xyz;
27
        vLightColor[i] = uLightColor[i];
28
        vLightAtt[i] = uLightAtt[i];
29
    }
30
31
    vSurfaceNorm = (uTMatrix * vec4(aVertexNorm, 0.0)).xyz;
32
    vVertexTex = aVertexTex * 128.0;
33
}
34
35-
Fragment Shader:
35+
//Fragment Shader:
36
#version 120
37
38
uniform sampler2D diffuseTexs[4];
39
uniform sampler2D blendTex;
40
41
varying vec3 vSurfaceNorm;
42
varying vec3 vLightVector[5];
43
varying vec3 vLightColor[5];
44
varying vec3 vLightAtt[5];
45
varying vec2 vVertexTex;
46
47
void main(){
48
    vec4 texelDiffuse0 = texture2D(diffuseTexs[0], vVertexTex);
49
    vec4 texelDiffuse1 = texture2D(diffuseTexs[1], vVertexTex);
50
    vec4 texelDiffuse2 = texture2D(diffuseTexs[2], vVertexTex);
51
    vec4 texelDiffuse3 = texture2D(diffuseTexs[3], vVertexTex);
52
53
    vec3 lTotalDiffuse = vec3(0.0);
54
    for(int i = 0; i < 5; i++){
55
        float lDist = length(vLightVector[i]);
56
        float attFactor = 1.0 + (0.01 * lDist) + (0.002 * lDist * lDist);
57
        vec3 lUnitNormal = normalize(vSurfaceNorm);
58
        vec3 lUnitLightVector = normalize(vLightVector[i]);
59
        float lNDotl = dot(lUnitNormal, lUnitLightVector);
60
        float lBrightness = max(lNDotl, 0.0);
61
        lTotalDiffuse = lTotalDiffuse + (lBrightness * vLightColor[i]) / attFactor;
62
    }
63
    lTotalDiffuse = max(lTotalDiffuse, 0.3);
64
    
65
    gl_FragColor = vec4(lTotalDiffuse, 1.0) * texelDiffuse0;
66
}