Seufz, Browser abgestürzt vor dem Senden. Also nochmal die Kurzfassung.
Punkt 1: Die Blend-Operation, die du erreichen willst, lautet: dest.color = src.color * src.alpha + dest.color * (1 - src.alpha). Also:
Code:
D3DDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
D3DDevice.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
D3DDevice.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
D3DDevice.SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
Punkt 2: Alphatesting hat mit Alphablending nichts zu tun.
Punkt 3: Das Ergebnis des Texture Stage soll bei dir den Alphakanal beinhalten. Das sind alles Default-Werte und sie sollten daher nicht eingestellt werden müssen, aber für alle Fälle:
Code:
D3DDevice.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
D3DDevice.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
D3DDevice.SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
D3DDevice.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
D3DDevice.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
D3DDevice.SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
Das hat zur Konsequenz, dass die modulierte Farbe (!) aus Textur und Diffuse als Farbe herauskommt, und der Alphakanal der Textur als Alphakanal. Erst danach findet das Blending mit dem RenderTarget statt.
Damit sollte eigentlich alles funktionieren. Wenn nicht, probiere folgendes:
Setze den Alphakanal im Diffuse deiner Vertices auf z.B. 0.5, und verwende als ALPHAARG1 D3DTA_DIFFUSE. Dann sollte eigentlich ein Per-Vertex-Alphablending funktionieren und es liegt zumindest nicht generell an einer Fehlkonfiguration. Du solltest deine Textur in dem Fall nochmal genauer untersuchen.
Edit: Turbopascals Link geht zwar minimal am Thema vorbei, aber ein Tutorial auf derselben Seite weiter ist eventuell für dich auch zielführend:
http://www.two-kings.de/tutorials/dx...raphics11.html. Allerdings gehen die da nicht wirklich auf Hintergrundinformationen ein.