2012-02-04 3 views
4

est-il un moyen de spécifier {GL_SRC_COLOR, xxx} et {xxx, GL_DST_COLOR} de telle sorte que les couleurs de la source et la destination sont multipliés et également veiller à ce que si GL_SRC_ALPHA = 0 que le résultat est {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}? Je crée un rectangle superposé sur mon monde de jeu qui commence transparent mais au fil du temps, la superposition devient une combinaison de bleu foncé et les couleurs sous-jacentes.OpenGL Blending GL_SRC_COLOR/GL_DST_COLOR

J'ai essayé {GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA} entre autres, montré ci-dessous. Dans les deux images, le côté gauche est la journée sans la superposition, le côté droit avec la superposition.

La nuit est sur la droite, la superposition (SRC) à pleine alpha

1

temps jour avec la superposition est sur la droite à 0 alpha.

2

Le problème est que, avec SRC alpha égal à zéro la couleur de destination est doublée. Je voudrais qu'il reste le même que sans la superposition, de sorte que je ne peux ajuster que l'opacité pendant le jeu et la transition vers la nuit. Y a-t-il un moyen de le faire, ou un autre moyen d'obtenir le même effet?

Répondre

3

Résolu. C'est plus facile que d'utiliser un alpha en fait. J'ai utilisé ce pour la superposition:

{GL_DST_COLOR, GL_ZERO} 

Au début, lorsque vous avez la journée, vous ne voulez pas de changement de couleur du tout, de sorte que vous définissez la couleur de la superposition à {255,255,255} (blanc). L'alpha n'est pas utilisé et n'est pas important. Cette couleur est ensuite multipliée par la couleur de destination (le fond du monde). À l'approche de la nuit, vous pouvez colorer le monde à n'importe quelle couleur en ajustant uniquement la couleur de votre superposition. Si vous voulez un bleu foncé, vous devez ajuster les autres canaux (rouge et vert), laissant relativement plus de canaux bleus dans la destination (arrière-plan mondial). Voici l'effet de la définition de la couleur sur {120, 150, 200}.

1