2016-01-23 1 views
0

J'essaie de dessiner une lueur/ombre intérieure pour un objet constitué de quatre courbes de Bézier cubiques. Pour tracer une courbe de Bézier Je divisant en segments et en calculant ensuite les distances de pixel courant à chaque segment de ligne et enfin je mélange avec min:Dessin de l'ombre interne pour les courbes de Bézier dans OpenGL/GLSL

// No GL_MAX blending mode in OpenGL ES 2.0 d_min = min(d_min, d)

d est une distance pour chaque segment. Zoomé exemple de mélange de deux segments de ligne:

enter image description here

Il fonctionne assez bien lorsque vous avez ~ 25 segments représentant une courbe courte Bézier

enter image description here

à l'exception des « gouttières » dans les lieux où les courbes de Bézier et leurs gradients respectifs se combinent.

Q: Comment puis-je éviter ces artefacts? Existe-t-il une meilleure méthode pour dessiner une lueur/ombre intérieure?

enter image description here

+1

this [Dessiner une courbe quadratique sur GPU] (http://stackoverflow.com/a/31423105/2521214) pourrait aider un peu – Spektre

Répondre

1

Qu'en est-il de faire un flou sur vos courbes, puis masquer le résultat à la zone à l'intérieur?

+0

Oui, c'est comme ça que Photoshop le fait. Je ne sais pas pourquoi l'OP obtient les artefacts qu'il obtient bien. –