J'ai une texture OpenGL RGBA et j'y mets une autre texture RGBA en utilisant un objet framebuffer. Le problème est que si j'utilise les fonctions de fusion habituelles avec glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),
le blit qui en résulte modifie la texture de destination alpha, le rendant légèrement transparent pour les endroits où alpha était auparavant 1. Je voudrais que l'alpha de surface de destination ne change jamais, mais sinon l'effet sur les valeurs RVB devrait être exactement comme avec GL_SRC_ALPHA
et GL_ONE_MINUS_SRC_ALPHA
. Ainsi, les fonctions du facteur de mélange doivent être (As, As, As, 0) et (1-As, 1-As, 1-As, 1). Comment puis-je y parvenir?OpenGL: Comment faire un RGBA-> RGBA sans modifier la destination alpha
Répondre
Vous pouvez définir les mélanges-modes pour RVB et alpha à différentes équations:
void glBlendFuncSeparate(
GLenum srcRGB,
GLenum dstRGB,
GLenum srcAlpha,
GLenum dstAlpha);
Dans votre cas, vous souhaitez utiliser les énumérations suivantes:
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);
Notez que vous pouvez avoir à importez la fonction glBlendFuncSeparate en tant qu'extension. C'est sûr de le faire cependant. La fonction est là depuis très longtemps. Il fait partie d'OpenGL 1.4
Une autre façon de faire la même chose est de désactiver l'écriture à l'alpha-canal à l'aide glColorMask:
void glColorMask(GLboolean red,
GLboolean green,
GLboolean blue,
GLboolean alpha)
Il pourrait être beaucoup plus lent que glBlendFuncSeparate parce que les pilotes OpenGL optimisent la Les fonctions les plus couramment utilisées et glColorMask est l'une des fonctions OpenGL rarement utilisées.
Si vous êtes malchanceux, vous pouvez même finir avec l'émulation de rendu logiciel en appelant des fonctions :-) loufoques
Peut-être que vous pourriez utiliser glColorMask()? Il vous permet d'activer/désactiver l'écriture pour chacun des quatre composants de couleur.
- 1. OpenGL Alpha Stack
- 2. Modification de la valeur Alpha à la volée pour une texture 3D RGBA
- 3. OpenGL Alpha mélange avec la mauvaise couleur
- 4. Sélection Opengl avec test alpha
- 5. Comment modifier l'adresse MAC de destination dans un paquet?
- 6. iPhone OpenGL ES mélange alpha incorrect
- 7. Modifier Alpha sur la fenêtre principale - Cocoa
- 8. fond une alpha dans IE
- 9. PNG8 + Alpha de Fireworks (colormap) sont différents/plus petits que d'ailleurs (RGBA). Pourquoi?
- 10. Utilisation d'iptables pour modifier un port de destination
- 11. Comment attacher la valeur alpha d'un élément à un curseur?
- 12. Représentation hexadécimale d'une couleur avec un canal alpha?
- 13. Changer l'opacité de la texture dans OpenGL
- 14. opengl frustum culling sans glGet * appels
- 15. Comment puis-je modifier un module sans redémarrer l'interpréteur python?
- 16. Comment définir alpha sur un DAE?
- 17. comment faire GridView modifier le lien appelle la fonction javascript?
- 18. Comment modifier un fichier texte?
- 19. Conversion d'une application OpenGL pour la faire fonctionner sur l'iPhone
- 20. Convertir ALPHA-2 en ALPHA-3 en C# ASP.net
- 21. Remplacer un élément dans memcached sans modifier l'heure d'expiration
- 22. Comment faire pour déboguer OpenGL ES se bloque?
- 23. Comment définir alpha dans R?
- 24. Comment faire pour modifier la taille de la taille fielddef dans un TClientDataSet après LoadFromFile
- 25. Dans OpenGL ES sur iPhone, comment faire défiler deux images?
- 26. comment insérer dans la destination oledb de commande oledb
- 27. Comment modifier la FontFamily sur un ContentPresenter?
- 28. Modifier une action dans TableView sans bouton Modifier?
- 29. Comment créer un bitmap avec un canal alpha à la volée en utilisant GDI?
- 30. URL sans paramètres de requête - Comment faire la distinction
J'ai trouvé le soutien glColorMask() pour être en général tout à fait décent. –