2013-10-21 8 views
5

Ero interessato a disegnare una linea con una larghezza specifica (o più righe) usando uno shader di frammenti. Mi sono imbattuto nello this post che sembra spiegarlo.Fragment shader - traccia una linea?

La sfida che ho è capire la logica dietro.

Un paio di domande:

  1. Il nostro spazio di coordinate in questo esempio è (0.0-1.0,0.0-1.0), giusto?
  2. In tal caso, qual è lo scopo della variabile "uv". Poiché lo spessore è 500, la variabile "uv" sarà molto piccola. Quindi le distanze da esso a pont 1 e 2 (memorizzate nelle variabili aeb)?
  3. Infine, qual è la logica dietro la variabile h?

risposta

2

cercherò di rispondere a tutte le vostre domande una per una:

1) Sì, questo è in realtà corretto.

2) È comune in computer grafica 3D esprimere le coordinate (entro certi limiti) con valori a virgola mobile compresi tra 0 e 1 (o tra -1 e 1). Prima di tutto, questo rende abbastanza facile decidere se un determinato valore attraversa o meno il confine e astrae da un concetto di "pixel" che è un'unità di immagine discreta; inoltre questa pratica comune può essere trovata praticamente ovunque (si pensi alle coordinate del dispositivo o alle coordinate della trama)

Non temere che i valori con cui si sta lavorando siano meno di uno; in effetti, nella computer grafica di solito ci si occupa di aritmetica in virgola mobile, e i tipi FLOAT sono abbastanza bravi nell'esprimere la linea dei valori reali attorno al punto "1".

3) La formula per h è composta da 2 parti: la parte radice quadrata e il coefficiente 2/c. La parte radice quadrata dovrebbe essere ben nota dalle classi di matematica di Scholl: questa è la formula di Heron per l'area di un triangolo (tra a, b, c). 2/c estrae l'altezza di detto triangolo, che è memorizzato in h ed è anche la distanza tra il punto uv e la "linea di terra" del triangolo. Questa distanza viene quindi utilizzata per decidere, dove è uv in relazione alla linea p1-p2.