Aumentare e diminuire la dimensione del punto colpisce più di un pixel, ma shader sono destinate ad essere eseguito solo una volta per pixel. Fallirà, perché una volta che il programma shader è stato eseguito per un particolare pixel, la modifica interesserà solo i seguenti pixel, ma non i pixel precedenti.
I programmi di ombreggiatura vengono eseguiti su molte unità di shader simultaneamente e per molti pixel in parallelo rendendo impossibile fare ciò che si sta tentando di fare. La limitazione sarà che si può impostare la dimensione del pixel con un programma shader, ma manterrà le sue dimensioni per tutti i pixel che il programma shader verrà eseguito.
Si potrebbe provare a ordinare i dati dei punti per dimensione e punti di gruppo della stessa dimensione in una matrice e disegnare ogni matrice con una dimensione punto diversa.
Oppure si potrebbe provare a farlo con un riferimento indiretto in cui per la prima volta da rendere le diverse dimensioni in punti in una texture e in un secondo passaggio rendere il pixel accedendo ai dati delle texture e di utilizzarlo per verificare se un pixel debba essere reso (o non).
Grazie. C'è un modo per impostare la dimensione del punto usando gli attributi del vertice invece di usare 'gl_pointSize = gl_Normal.x'? – max
Immagino che sia possibile aggiungere il proprio attributo float a quello shader e usare 'glVertexAttrib1f' o' glVertexAttribPointer' per impostarlo. Potresti dare un'occhiata a http://nehe.gamedev.net/data/articles/article.asp?article=21. – tibur
Ok. Grazie. I vertici attribuiscono il modo standard di trasferire dati aggiuntivi in uno shader? – max