Projekt

Obecné

Profil

Stáhnout (1.63 KB) Statistiky
| Větev: | Tag: | Revize:
1
// Matice projekce.
2
uniform mat4 un_Projection;
3
// Pozice svetla.
4
uniform vec3 un_Light;
5
// Model-view matice pro kazdy graficky prvek (az na zdi, pro ty se matice shoduji
6
// s matici trajektorie).
7
uniform mat4 un_ModelView[5];
8
// Normalova matice pro kazdy graficky prvek (az na zdi).
9
uniform mat3 un_Normal[5];
10
// Barvy pro kazdy graficky prvek (az na zdi, u tech je barva urcena texturou).
11
uniform vec4 un_Color[5];
12

    
13
// Souradnice vrcholu.
14
attribute vec3 vertex;
15
// Normala pridelena k danemu vrcholu.
16
attribute vec3 normal;
17
// K jakemu grafickemu prvku vrchol patri.
18
attribute float group;
19

    
20
// Typ grafickeho prvku, ktery je sdilen s FRAGMENT casti shader programu.
21
varying float v_Group;
22
// Intezita svetla pro dany vrchol.
23
varying float v_Light;
24
// Barva daneho vrcholu.
25
varying vec4 v_Color;
26
// Jaka UV souradnice textury odpovida danemu vrcholu (pouze u group >= 4, coz
27
// jsou zdi).
28
varying vec2 v_Coord;
29

    
30
// Pri kazdem prekresleni se zavola pro kazdy vrchol.
31
void main()
32
{
33
    v_Group = group;
34
    if (v_Group >= 5.0)
35
    {
36
        int corner = int(v_Group) - 5; // O jaky roh textury jde.
37
        v_Coord = vec2(corner == 2 || corner == 3, corner == 1 || corner == 3);
38
        v_Group = 5.0; // Pro vsechny zdi stejna pravidla (az na barvy).
39
    }
40
    
41
    // a mod b = a - (b * floor(a/b))
42
    int index = int(v_Group) - (5 * int(floor(v_Group / 5.0))); // 5 = zed - bez jakychkoli uprav, stejne jako 0 = trajektorie.
43
    v_Light = max(dot(normalize(un_Normal[index] * normal), normalize(un_Light - vertex)), 0.0);
44
    v_Color = un_Color[index];
45
    
46
    // Vysledna pozice (pixel).
47
    gl_Position = un_Projection * un_ModelView[index] * vec4(vertex, 1.0);
48
}
(2-2/2)