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.