2012-04-28 18 views
6

Nel mio progetto OpenGL, voglio creare dinamicamente poligoni smussati, simili come questo:OpenGL: creare complessi e levigate poligoni

enter image description here

Il problema si basa principalmente nel processo di levigatura. La mia procedura fino a questo punto, è innanzitutto quella di creare un VBO con vertici disposti casualmente.

Quindi, nel mio frammento shader, (sto utilizzando la pipeline di funzione programmabile), dovrebbe verificarsi il processo di livellamento o, in altre parole, creato le curve fuori dalle "linee" precedentemente definite tra i vertici.

E proprio qui è il problema: non ho molta familiarità con quei complessi algoritmi matematici, che esaminerebbero, se un punto è all'interno del "poligono levigato" o meno.

risposta

3

Per prima cosa, non è possibile farlo nello shader dei frammenti. Il framment shader è limitato all'impostazione del colore finale (ish) di un "pixel" (che è fondamentalmente, ma non esattamente, un pixel reale) prima che venga scritto sullo schermo. Non può creare nuovi punti su una curva.

This page offre una buona panoramica dei diversi algoritmi per la creazione di curve morbide.

L'approccio generale consiste nel suddividere un paio di punti in più punti utilizzando uno shader di geometria e quindi renderli come un normale poligono. Ma non conosco i dettagli. Prova una ricerca su google per bezier geometry shader per esempio.

Aspetta, mento. Ho trovato un programma here che lo fa nello shader di frammenti.

+0

Grazie! Penso di aver trovato quello che stavo cercando: http://code.google.com/p/victamin/downloads/detail?name=GPUBezier.zip – cafaxo