AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DelphiX] Alphablending via "Surface.Blt"
Thema durchsuchen
Ansicht
Themen-Optionen

[DelphiX] Alphablending via "Surface.Blt"

Offene Frage von "dizzy"
Ein Thema von dizzy · begonnen am 2. Jul 2004 · letzter Beitrag vom 5. Jul 2004
Antwort Antwort
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

[DelphiX] Alphablending via "Surface.Blt"

  Alt 2. Jul 2004, 17:12
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
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 4. Jul 2004, 01:55
*schiehiiiiieb*

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!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 5. Jul 2004, 00:07
Ja Scheisse... (sorry, aber is so)

Zitat von 2D Alpha Blending by Gary Simmons:
I have lost count of the number of times I have seen in programming news groups, cry's for help from people who cant get DirectDraw to do Alpha Blending. These people think THEY are doing something wrong or missing something, but they are not. The simple fact is this :

DirectDraw does not support AlphaBlending
*buääääähhhhh*


...kann doch nicht wahr sein... MANN!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 5. Jul 2004, 00:12
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#5

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 5. Jul 2004, 00:15
mit openGL gehts *duck*
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 5. Jul 2004, 00:20
ich könnt' : Der Typ machts mit Direct3D, in Englisch, in C, zu kompliziert, zu viel für nen blöden kleinen Effekt...

@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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#7

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 5. Jul 2004, 00:23
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: [DelphiX] Alphablending via "Surface.Blt"

  Alt 5. Jul 2004, 00:39
mit GLScene hatte ich auch schon so meine Last.

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!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz