Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Alphatransparent von Bildern bei Direct3D

  Alt 25. Aug 2007, 06:57
also ich hab mir jetzt mal D3DRS_ALPHATESTENABLE angeschaut und es scheint so als ob man damit nur bestimmen kann ob gezeichnet wird oder nicht. Aber eine halbdurchsichtigkeit scheine ich damit nicht erreichen zu können.

mit folgendem Quelltext bekomme ich eine Alphatransparenz in Abhängigkeit von der Texturefarbe. Das muss doch auch irgendwie klappen in Abhängigkeit von dem Alphakanal.
Delphi-Quellcode:
D3DDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
D3DDevice.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
D3DDevice.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
ich hab auch schon mit den Konstanten D3DBLEND_SRCALPHA etc. herum gespielt aber ich bekomme nie das gewünschte Ergebnis (Alphatransparenz nur vom TextureAlphakanal abhängig)

Muss eventuell ein bestimmter CULL-Mode gesetzt sein damit es annähernd funktioniert?


ich hatte auch mal folgendes probiert:
Delphi-Quellcode:
D3DDevice.SetRenderState(D3DRS_ALPHATESTENABLE, 1);
D3DDevice.SetRenderState(D3DRS_ALPHAREF, 0);
D3DDevice.SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATER);
das müsste ja eigentlich bewirken das pixel mit einem Alphawert größer 0gezeichnet werden. Allerdings ist das Ergebnis das nichts gezeichnet wird. Oder verstehe ich da irgendwas falsch? (habs auch schon mit den geposteten Werten probiert was allerdings auch keinen Erfolg brachte)


Oder muss ich eventuell noch irgendwo einen Puffer auf 32bit setzen (außer den des Bildes) damit während der Ausgabe die 32bit erhalten bleiben und somit beachtet werden können?

ich hab eben noch folgendes probiert:
Delphi-Quellcode:
D3DDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
D3DDevice.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
D3DDevice.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
und
Delphi-Quellcode:
D3DDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
D3DDevice.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA);
D3DDevice.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCALPHA);
Und obwohl der Alphakanal des Bildes auf 127 steht (A8R8G8B8) ist entweder gar nichts zu sehen oder mit voller Deckkraft. Es scheint das mein Alphakanal irgendwie ignoriert wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat