Sto imparando la grafica OpenGL e sto entrando nell'ombra. Le esercitazioni che sto leggendo mi stanno dicendo di trasformare le mie normali e il vettore di luce nello spazio della fotocamera. Perchè è questo? Perché non riesci a mantenere le corde nello spazio modello?Perché si utilizza lo spazio della fotocamera invece dello spazio modello per le normali?
Una domanda di follow-up è come gestire le trasformazioni del modello. Non riesco a trovare una risposta definitiva. Al momento ho questo codice:
vec3 normCamSpace = normalize(mat3(V) * normal);"
vec3 dirToLight = (V*vec4(lightPos, 0.0)).xyz;"
float cosTheta = clamp(dot(normCamSpace, dirToLight),0,1);"
V è la matrice di visualizzazione o la matrice della telecamera. Non sono sicuro di come spostare o modificare la luce quando il modello cambia in posizione, rotazione e scala.
OK, ha senso, anche se ho quel livello di separazione.Tuttavia, sono ancora incerto su come modificare la sorgente di luce e le posizioni in modo da adattarsi a cose come rotazioni e traduzioni. – user975989
Il modo canonico è di trasformare la posizione della luce proprio mentre trasformi la posizione del vertice. E in caso di proiettori (per i quali è richiesta la direzione dello spot) si trasforma la direzione spot proprio come si trasformerebbero le normali. Per ogni matrice di trasformazione tra spazi (ciò vale anche per la trasformazione da, diciamo, da mondo a modello locale) la trasformazione normale è sempre la trasposizione inversa della trasformazione di posizione. – datenwolf