Hallo
ich2,
erst mal vielen Dank für deine Antwort. Dein Code sah wirklich vielversprechend aus, es will bei mir jedoch einfach nicht funktionieren. Ich zeige besser mal meine Initialisierung:
Delphi-Quellcode:
with Params
do begin // Params : TD3DPRESENTPARAMETERS
BackBufferWidth := 640;
BackBufferHeight := 480;
BackBufferCount := 1;
BackBufferFormat := D3DFMT_A8R8G8B8;
SwapEffect := D3DSWAPEFFECT_DISCARD;
hDeviceWindow := 0;
Windowed := true;
end;
// DirectX Instanz erstellen
DirectX := Direct3DCreate8(D3D_SDK_VERSION);
DirectX.CreateDevice( D3DADAPTER_DEFAULT,
// Default Grafikkarte
D3DDEVTYPE_HAL,
Form1.Handle,
// Handle, auf das gezeichnet werden soll
D3DCREATE_HARDWARE_VERTEXPROCESSING,
// Hardwarebeschleunigung für Vertex
Params,
// Oben gesetzte Parameter verwenden
Device);
// Device : IDirect3DDevice8
// Sprite erstellen
D3DXCreateSprite(Device, Sprite);
// Sprite : ID3DXSprite
// Enable Alpha Test (colorkeying)
Device.SetRenderState(D3DRS_ALPHAREF, $000000FF );
Device.SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
Device.SetRenderState(D3DRS_ALPHATESTENABLE, 1);
// Set texture stages (colorkeying)
Device.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
Device.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
Device.SetRenderState(D3DRS_CULLMODE, Ord(D3DCULL_NONE));
Die letzten 8 Codezeilen habe ich aus
ich2s Post übernommen
(Habe für model.alpharef die Werte 0 und $000000FF getestet)
Ich lade dann eine Textur
Test.bmp aus meinem Programmordner:
http://img266.imageshack.us/img266/1386/testrzb.png
3DXCreateTextureFromFile(Device, PChar('Test.bmp'), Texture); // Texture : IDirect3DTexture8
Zuletzt zeichne ich sie dann in doppelter Ausführung auf den Background Buffer (verschoben):
Delphi-Quellcode:
Device.Clear(0, nil, D3DCLEAR_TARGET, $FF000000, 0, 0);
Device.BeginScene;
Sprite._Begin;
Target.x := 0; // Target : TD3DXVector2
Target.y := 0;
RotCenter.x := 0; // RotCenter : TD3DXVector2
RotCenter.y := 0;
Sprite.Draw(Texture,
nil, // Gesamte Textur
nil, // @scaleVect, bei nil wird nicht skaliert
@RotCenter, // @rotationCenter,
0, // Rotation
@Target, // @TranslationVector
Color);
Target.x := 80;
Target.y := 35;
Sprite.Draw(Texture,
nil, // Gesamte Textur
nil, // @scaleVect, bei nil wird nicht skaliert
@RotCenter, // @rotationCenter,
0, // Rotation
@Target, // @TranslationVector
Color);
Sprite._End;
Device.EndScene;
Device.Present(nil, nil, 0, nil);
Das Ergebnis ist immer das gleiche: von Transparenz keine Spur:
http://img266.imageshack.us/img266/8974/test3k.jpg
Habe ich irgendwas falsch gemacht? Falls ja, wo liegt mein Fehler?
Vielen Dank schonmal im Voraus für jede Form von Hilfe,
ich verzweifle noch daran.
Lieben Gruß,
Xoric