Texture mapping: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Riga 15:
Si consideri una scena con un pavimento ligneo, e si determini che il colore diffuso del pavimento sia controllato da un'immagine che mostra assi del pavimento con una grana lignea. A prescindere che si stia utilizzando il [[ray tracing]] o la [[rasterizzazione]], il codice dello shading che calcola il colore per un punto di intersezione raggio-superficie o per un frammento generato dal rasterizer, necessita di sapere il colore della texture nello shading point, in modo da usarlo come colore diffuso nel modello di shading lambertiano.
 
Per ottenere questo colore, lo [[shader]] esegue un '''texture lookup''':<ref name=":1" /> comprende la posizione, nel sistema di coordinate della texture immagine, che corrisponde allo shading point, e legge il colore in quel punto nell'immagine, che ci risulta nel '''texture sample'''<ref name=":1" />. Quel colore è dopo usando nello shading, e dato che il texture lookup avviene in differenti posizioni nella texture per ogni pixel che vede il pavimento, diviene visibile un pattern di colori differenti nell'immagine. Il codice potrebbe apparire in questo modo:
<syntaxhighlightpre>
Color texture_lookup(Texture t, float u, float v) {
int i = round(u * t.width() - 0.5)
Riga 28 ⟶ 29:
// return shading result
}
</pre>
</syntaxhighlight>In questo codice, lo shader chiede alla superficie dove guardare nella texture, e in qualche modo ogni superficie che si desideri ombreggiare usando una texture necessita di essere in grado di rispondere a questa richiesta. Questo porta al primo ingrediente chiave del texture mapping: abbiamo bisogno di una funzione che esegua una [[Mappatura UV|mappatura]] dalla superficie alla texture, che possiamo calcolare facilmente per ogni pixel. Questa è la '''texture coordinate function''', e diremo che essa assegna delle '''texture coordinates''' per ogni punto sulla superficie. Matematicamente essa è una mappatura dalla superficie <math>S</math> al dominio della texture, <math>T</math>:<ref name=":1" />
 
</syntaxhighlight>In questo codice, lo shader chiede alla superficie dove guardare nella texture, e in qualche modo ogni superficie che si desideri ombreggiare usando una texture necessita di essere in grado di rispondere a questa richiesta. Questo porta al primo ingrediente chiave del texture mapping: abbiamo bisogno di una funzione che esegua una [[Mappatura UV|mappatura]] dalla superficie alla texture, che possiamo calcolare facilmente per ogni pixel. Questa è la '''texture coordinate function''', e diremo che essa assegna delle '''texture coordinates''' per ogni punto sulla superficie. Matematicamente essa è una mappatura dalla superficie <math>S</math> al dominio della texture, <math>T</math>:<ref name=":1" />
 
<math display="block">\begin{align} \phi & : S \rightarrow T \\ & : (x,y,z) \mapsto (u,v) \\ \end{align}</math>