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.