Einzelnen Beitrag anzeigen

XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: DirectX 8 - Transparente Farbe

  Alt 29. Jul 2009, 09:20
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
  Mit Zitat antworten Zitat