2011-05-18 1 views
6

Je sais que glBlendFunc est l'appel de fonction pour spécifier un mode de fusion de pixels.Comment fusionner des pixels dans le mode écran de type photoshop dans OpenGL?

je peux faire la Multiply Mode comme dans Photoshop, dont la formule est

C = A * B 

où A est le pixel source, B est le pixel de destination, et C est le résultat final. Utilisation de glBlendFunc (GL_DST_COLOR, GL_ZERO) J'obtiendrai cet effet. Maintenant, ma question est de savoir comment utiliser le Screen Mode? La formule est la suivante:

C = 1 - (1 - A) * (1 - B) 

Répondre

7

N'a pas vérifié, mais le chemin à parcourir est le suivant.

Le calcul intégré que OpenGL ne ressemble:

C = A*s + B*d 

Où vous pouvez choisir les s et d.

Certains algèbre nous donne

C = 1 - (1 - A) * (1 - B) = 
    = 1 - (1 - B) + A*(1 - B) = 
    = A*(1 - B) + B 

Laissez

s = 1 - B 
d = 1 

et nous obtenons la valeur que nous voulons. Cela devrait donc fonctionner:

glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE); 
+0

Algebra! J'oublie totalement ça! Merci, bonne réponse. – trVoldemort

Questions connexes