Direct3D-Rendering von 2D-Bildern mit Mischmodus „Multiplizieren“ und Alpha

Ich versuche, den Photoshop-Filter mit Direct3D zu replizieren. Ich habe gelesen und über die verschiedenen Render-Zustände gegoogelt und ich habe den Effekt fast funktioniert. Das Problem ist, dass der Alpha-Wert der Texturen ignoriert wird.

Hier ist ein Bild, das die Situation erklärt:

http://www.kloonigames.com/petri/stackoverflow_doesnt_allow_.jpg

Ich habe eine Lösung dafür gefunden, nämlich Bilder ohne Transparenz und weißen Hintergrund zu speichern. Mit dieser Lösung bin ich aber nicht zufrieden. Das Problem ist, dass ich wirklich den Alpha-Wert verwenden muss. Ich möchte die Bilder nach und nach ausblenden. Und ich kann das nicht tun, wenn der Mischmodus den Alpha-Wert ignoriert.

Die Frage ist also, wie man die Bilder mit Alpha rendert.

Hier ist der Mischmoduscode:

dev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);

Bearbeiten hat den SetTextureStageState hinzugefügt

dev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
dev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
dev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
dev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage