![]() |
[DelphiX] Alphablending via "Surface.Blt"
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:
Kann mir einer sagen wo ich jetzt den Fehler sehen muss?
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; gruss, dizzy \\edit: Ach so! Ist mit DelphiX for Delphi 7 |
Re: [DelphiX] Alphablending via "Surface.Blt"
*schiehiiiiieb* :angle2:
Bin leider kein Stück weiter gekommen :? Hat denn noch niemand hier zwei DirectX-Surfaces ineinanderkopiert? Irgendwie? Und schnell, so dass für Animation geeignet? Zu Hüüülf! :) |
Re: [DelphiX] Alphablending via "Surface.Blt"
Ja Scheisse... (sorry, aber is so)
Zitat:
...kann doch nicht wahr sein... MANN! |
Re: [DelphiX] Alphablending via "Surface.Blt"
Heisst das jetzt, dass ich für "blödes" einfaches Alphablending auf Direct3D zurückgreifen muss? Das wäre absoluter Overkill. Oder hat jemand von euch eine Idee wie man mit Delphi reichlich schnell bis zu 5 Bitmaps, jeweils mit halber Durchlässigkeit, ineinander Belnden kann?
Die Routinen die die Graphics 32 Lib bereitstellt sind n Tacken zu lahm :? |
Re: [DelphiX] Alphablending via "Surface.Blt"
mit openGL gehts *duck*
|
Re: [DelphiX] Alphablending via "Surface.Blt"
ich könnt' :kotz: :
![]() @supermuckl: OpenGL ist doch sowieso "nur" 3D, oder? Es würde auf das selbe hinaus laufen: Die Bilder sind Texturen, und es würden n Polygone halbtransparent "übereinandergestapelt" die je eines der Bildes enthalten, gell? Ich würde das sehr gerne ohne jegliches 3D lösen... OpenGL hab ich schon mal angefasst, und naja, einfach und schnell ist was anderes :? |
Re: [DelphiX] Alphablending via "Surface.Blt"
jo da haste recht.. aber mich juckts nicht sehr.. bin ja gerade dran n 2D "ballerburg" zu coden..
und da tu ich einfach so alsob ich 2D habe.. und stell es mit hilfe von der 3D engine 2D mäßig dar.. geht super.. und ich kann nebenher auch noch lustige effekte nutzen.. auch 3D objekte die nacher wie 2D gerendert werden.. oder schatten machen usw :) GLScene machts möglich :D |
Re: [DelphiX] Alphablending via "Surface.Blt"
:roll: mit GLScene hatte ich auch schon so meine
![]() Aber nun gut, dann get es so nicht. Schade auch! Falls es mal um mehr als nen kleinen Effekt geht werd ich aber wohl dann zu GLScene greifen... Bin aber auch weiterhin für Ideen (non-3D ;)) offen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz