2010-11-02 22 views
9

J'ai une petite application de peinture basée sur l'exemple de code GLPaint. Cela fonctionne bien. Mon problème est que j'ai besoin d'implémenter un "pinceau" qui efface les textures déjà dessinées.Fusion d'une texture pour effacer doucement les valeurs alpha avec OpenGL

Mon but est d'avoir une gomme qui a des bords doux. En ce moment, je viens de prendre la même texture que j'ai utilisé pour le dessin, mais les fonctions de mélange changé de

glBlendFunc(GL_SRC_ALPHA, GL_ONE); 

à

glBlendFunc(GL_ZERO, GL_ZERO); 

Le résultat est une gomme rectangulaire carré. C'est bon mais ce n'est pas ce que je veux vraiment. J'ai besoin de bords doux. Je veux faire une gomme ronde pas un carré rectangulaire.

Avez-vous une idée de la façon d'y parvenir? Ou savez-vous s'il existe un moyen de créer ma propre fonction de fusion personnalisée?

+0

Je pense que vous vouliez quelque chose comme ceci: http://stackoverflow.com/questions/10373847/producing-eraser-effects-using-libgdx-and -opengl-es qui est en fait mon propre problème et je suis toujours coincé sur la façon d'y parvenir. – Rafay

Répondre

11

Connaissez-vous la couleur de fond de la texture? Si c'est le cas, au lieu de "effacer", vous pouvez simplement peindre l'arrière-plan. Ce serait un peu plus simple, car vous ne changeriez que la couleur et pas le mod de fusion.

Si vous avez besoin de le faire avec le mélange, essayez:

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 

Cela utilisera le zéro dans la zone de pleine alpha, et disparaître de nouveau dans la couleur existante comme fane alpha de la brosse au large.

Cette page contient une liste complète des modes possibles: http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml

+0

L'arrière-plan est une image, donc je ne peux pas peindre dessus. Avez-vous d'autres solutions? –

+0

La fonction de fusion que j'ai suggéré vaut la peine d'être essayée, si c'est possible. Si GL_ZERO/GL_ZERO fonctionnait, alors utiliser zéro et l'alpha inverse devrait également. – ssube

+0

J'essaie la fonction glBlendFunc (GL_ZERO, GL_ONE_MINUS_SRC_ALPHA), mais elle ne peut même pas effacer. –