2010-05-12 8 views
4

Je suis un débutant complet avec openGL, et j'essaie de voir si ce que je veux faire est faisable avant de commencer. Je voudrais savoir s'il est possible d'effectuer un mélange avec un canal alpha par composant (un pour le rouge, un pour le vert et un pour le bleu) avec openGL? Si non, quelles sont les solutions de contournement possibles?Canaux alpha par composant avec OpenGL?

Merci!

Répondre

2

Ce n'est pas quelque chose qui est directement pris en charge. Il est assez facile à réaliser sur votre propre bien:

  • Render votre triangle (ou autre) en utilisant la texture « alpha » 3 canaux et glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR)
  • Activer multitexture et définir la texture « alpha » pour moduler votre rgb texture
  • votre triangle avec Render glBlendFunc(GL_ONE, GL_ONE)
+0

hum, ça ne marche pas avec un overdraw, je pense? C'est le problème habituel avec les algorithmes multi-passes ... – Bahbar

+0

@Bahbar Le mélange alpha ordinaire ne fonctionne pas avec n'importe quel overdraw non plus. Vous devrez trier les fragments en profondeur pour obtenir le bon résultat. –

+0

droite, vous devez trier avec un seul passage. Votre solution fonctionne quand même si vous faites le multi-passe avec la même granularité de tri. Je ne l'avais pas réalisé au début. – Bahbar

0

Qu'est-ce que vous décrivez est impossible avec OpenGL. Cela dit, étant donné que vous êtes nouveau sur OpenGL, peut-être que ce que vous décrivez n'est pas exactement ce que vous cherchez?

La fusion est l'étape qui se produit une fois que vous avez décidé de la couleur de votre fragment actuel (provenant généralement d'un triangle). Cette couleur doit être fusionnée avec la couleur précédente dans le frame-buffer. Es-tu sûr que c'est ce que tu cherches?

+2

Il y a des raisons parfaitement valables de vouloir faire cela, dans le monde réel la plupart des objets n'ont pas la même transparence sur l'ensemble du spectre de couleurs (considérons un vitrail). –

+0

@Andreas Brinck: Oui, il y en a. Mais l'OP déclare clairement qu'il est complètement nouveau pour OpenGL. Peut-être qu'il ne sait pas exactement ce que signifie le mélange (je l'ai vu confondu avec le calcul de la couleur des fragments plusieurs fois auparavant). – Bahbar

1

Vous pouvez le faire avec un pixel shader, mais vous devez trouver un moyen de stocker/accéder aux valeurs alpha des composants. Vous pouvez les stocker dans une texture et traiter les composants de couleur normaux comme les valeurs alpha de la couleur correspondante.

Quel effet/résultat tentez-vous d'atteindre?

Questions connexes