Lesson 12

vec3 calcNormal() {
vec3 normal = normalize(ex_Normal);
vec3 tangent = normalize(ex_Tangent);
//Gram–Schmidt process
tangent = normalize(tangent - dot(tangent, normal) * normal);
vec3 bitangent = cross(tangent, normal);
vec3 bumpMapNormal = texture(texture0, ex_TexCoord).xyz;
//převod z vektoru barvy o rozsahu <0,1> do vektoru normály <-1,1>
bumpMapNormal = 2.0 * bumpMapNormal - vec3(1.0, 1.0, 1.0);
// Transformační  matice TBN
mat3 TBN = mat3(tangent, bitangent, normal);
return normalize(TBN * bumpMapNormal);
}

void main(void){
vec3 N=calcNormal();

Zaměřte se mimojiné na čistotu svého kódu:
Kent Beck: Metoda, která má víc než 10 příkazů dělá pravděpodobně více věcí a je vhodné ji rozdělit.
Cay Horstmann: Přinese-li student ke zkoušce program s metodou delší než 35 příkazů, vyhodí jej, aniž by se jej na cokoli dalšího zeptal.