Hallo!
Ich versuche mich gerade in der Kunst des DirectDraw und hänge an einer blöden Stelle. Ich möchte einen Motion-Blur-Effekt realisieren.
Als Grundlage habe ich eine Array von TDirectDrawSurfaces in denen die zusammen zu blendenden Bilder liegen, aber gerade das Blending tut nicht
Erstmal etwas Kot:
Delphi-Quellcode:
const bmpCount = 3;
var i: integer;
ba: array[0..bmpCount] of TDirectDrawSurface;
fx : TDDBltFX;
begin
for i := 0 to bmpCount-1 do
begin
ba[i] := TDirectDrawSurface.Create(DXDraw1.DDraw);
ba[i].SetSize(1200, 600);
ba[i].Fill(0);
end;
// Die TDDBltFX-Structure einstellen, ich hoffe hier ist alles korrekt
fx.dwSize := SizeOf(fx);
fx.dwDDFX := 0;
fx.dwAlphaSrcConstBitDepth := 8;
fx.dwAlphaDestConstBitDepth := 8;
fx.dwAlphaSrcConst := 200;
fx.dwAlphaDestConst := 200;
DXDraw1.SurfaceWidth := 1200;
DXDraw1.SurfaceHeight := 600;
while true do
begin
// Die Bilder werden hier der Reihe nach um ein Element im Array
// nach hinten verschoben. Das scheint zu klappen... in ba[1] z.B.
// ist nachher tatsächlich ein Bild.
for i := bmpCount-2 downto 0 do
begin
ba[i].Canvas.Release;
ba[i+1].BltFast(0,
0,
ba[i].ClientRect,
DDBLTFAST_NOCOLORKEY,
ba[i]);
end;
ba[0].Fill(0);
// Hier wird im Original-Code auf dem Canvas von ba[0] gezeichnet - das klappt auch.
// Hier die Schleife die das Blending machen soll
// und ba[0] ist anschließend ganz schwarz :(
for i := bmpCount-2 downto 0 do
begin
ba[i].Canvas.Release;
ba[i].Blt(ba[i].ClientRect,
ba[i+1].ClientRect,
DDBLT_AlphaDestConstOverride or DDBLT_AlphaSrcConstOverride,
fx,
ba[i+1])
end;
ba[0].Canvas.Release;
DXDraw1.Surface.Draw(0,
0,
ba[0].ClientRect,
ba[0],
false);
DXDraw1.Flip;
Application.ProcessMessages;
end;
end;
Kann mir einer sagen wo ich jetzt den Fehler sehen muss?
gruss,
dizzy
\\edit: Ach so! Ist mit DelphiX for Delphi 7
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel