1 |
c137512e
|
Oto Šťáva
|
// 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 |
|
|
}
|