Einzelnen Beitrag anzeigen

Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#2

Re: DirectX 8 - Transparente Farbe

  Alt 29. Jul 2009, 08:23
Hallo Xoric...

es ist zwar schon ein wenig her, aber ich habe mal wieder die source-codes meiner 3D-Engine herausgekramt:
und da drinnen heißt es so für den Transparent-Teil:

Delphi-Quellcode:

 if Model.transparent then begin
   //transparent
   D3DDev8.SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
// D3DDev8.SetRenderState(D3DRS_SRCBLEND, Integer(D3DBLEND_INVSRCCOLOR));
// D3DDev8.SetRenderState(D3DRS_DESTBLEND, Integer({D3DBLEND_ONE}D3DBLEND_SRCALPHA));
   D3DDev8.SetRenderState(D3DRS_SRCBLEND, Integer(D3DBLEND_srcalpha));
   D3DDev8.SetRenderState(D3DRS_DESTBLEND, Integer(D3DBLEND_invsrccolor));
   D3DDev8.SetRenderState(D3DRS_CULLMODE, Ord(D3DCULL_none));

   D3DDev8.SetRenderState(D3DRS_ZWRITEENABLE, Ord(false));
 end else begin
   //nicht transparent
   D3DDev8.SetRenderState(D3DRS_ALPHABLENDENABLE, 0);

   D3DDev8.SetRenderState(D3DRS_CULLMODE, Ord(D3DCULL_CW));
  if not mirrortest then
   D3DDev8.SetRenderState(D3DRS_CULLMODE, Ord(D3DCULL_CCW)); //CW alle normalen gewendet
  if RenderCubeMap then
   D3DDev8.SetRenderState(D3DRS_CULLMODE, Ord(D3DCULL_none));

   D3DDev8.SetRenderState(D3DRS_ZWRITEENABLE, Ord(true));
 end;
...dann gibt es da noch die Möglichkeit Color-Keying zu betreiben, also bestimmte Farben einer Textur auszublenden:

Delphi-Quellcode:
//ColorKey -> freie Stellen in der Texture
 if Model.colorkey_enable then begin
  // Enable Aplha Test (colorkeying)
  D3DDev8.SetRenderState(D3DRS_ALPHAREF, model.alpharef );
  D3DDev8.SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
  D3DDev8.SetRenderState(D3DRS_ALPHATESTENABLE, 1);

  // Set texture stages (colorkeying)
  D3DDev8.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
  D3DDev8.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

  D3DDev8.SetRenderState(D3DRS_CULLMODE, Ord(D3DCULL_NONE));
 end;
..vielleicht hilft es dir weiter...

mfg
Wissen ist Macht. Das ändert aber so gut wie nichts an der Übermacht der Dummheit.
  Mit Zitat antworten Zitat