Edit : Problème résolu ! Voir la fin du message.
Comment implémenter le mode de mélange "Screen" de Photoshop dans DirectX 8 ?
Les informations que j'ai trouvées sur ce sujet ( http://www.ziggyware.com/readarticle.php?article_id=228 ) :
Result = 1 – (1 – destination) * (1 – source) Result = 1 – (1 – source – destination + destination * source) Result = 1 – 1 + source + destination – destination * source Result = source + destination – destination * source Result = destination + source – source * destination Result = destination + source * (1 – destination)
Maintenant que nous avons fait le calcul, nous devons simplement définir les modes de fusion :
BlendOperation = Add DestinationBlend = One SourceBlend = InvDestColor
Je suppose que les états de mélange de DirectX doivent l'être :
pD3DDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR);
Est-ce correct ? (J'ai un résultat erroné)
Exemple de projet : Lien Miroir
Résultat de Photoshop :
http://img192.imageshack.us/img192/7015/photoshopf.jpg
Mon résultat dans DirectX :
http://img193.imageshack.us/img193/2969/directx.jpg
Résolution de problèmes : La formule ne prend pas en compte l'alpha de l'image, pour y remédier vous devez rendre le fond de l'image noir solide avec une opacité de 100%.