Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Alphakanal in DelphiX (https://www.delphipraxis.net/4962-alphakanal-delphix.html)

Florian H 18. Mai 2003 18:34


Alphakanal in DelphiX
 
Hi!

Gibt es eine möglichkeit, für Bilder/Animationen einen Alphakanal (Transparenz) festzulegen?
Also ich meine nicht Surface.Draw...Alpha(..); sondern eben über ein Alphabild das für jeden Pixel einzeln regelt, wie transparenz er ist!

Sinn das ganzen: weiche Kanten bei den Sprites = AntiAliasing


Viele Grüße
Flo

Flogo 5. Dez 2004 22:01

Re: Alphakanal in DelphiX
 
Hi Flo ;-)
hab deinen Thread grad in der Suche gefunden. Hast du mittlerweile schon eine Lösung gefunden?
Lassen sich evtl. auch andere Formate (png?) in DelphiX laden?

dizzy 5. Dez 2004 23:53

Re: Alphakanal in DelphiX
 
Da hatte ich vor einiger Zeit auch meine Last mit. Es scheint wirklich nicht zu gehen (mit DirectDraw, D3D hingegen ist ja was anderes...).

Gruss,
Fabian

Flogo 6. Dez 2004 12:42

Re: Alphakanal in DelphiX
 
Zitat:

Zitat von dizzy
Ja Scheisse... (sorry, aber is so)

Zitat:

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



Was genau bedeutet das? In DelphiX gibt es doch gleich mehrere Funktionen für Alpha Blending (DrawAlpha, Eins von den Samples, ...)
Machen diese Teile kein "echtes" Alpha Blending? oder funktionieren sie nicht über DirectDraw?
Sorry ich hab leider nicht soviel Ahnung davon.
Was ist mit der anderen Alternative (png, tiff, psd)? Ist das überhaupt eine Alternative oder sollte da intern das gleiche passieren?

[Edit] Tags korrigiert [/Edit]

Oxmyx 6. Dez 2004 13:05

Re: Alphakanal in DelphiX
 
Es gibt eigentlich keinen Grund, DirectDraw zu benutzen. Das selbe kann man viel schneller (hardwarebeschleunigt), schöner und einfacher auch mit Direct3D machen. Wenn man RHW-Vertizes benutzt, kann man sogar wie in DirectDraw exakt die Bildschirmkoordinaten festlegen, an denen ein Bild erscheinen soll, da gibt es nichts mehr mit kompliziertem 3D.

dizzy 6. Dez 2004 13:59

Re: Alphakanal in DelphiX
 
Zitat:

Zitat von Flogo
Was genau bedeutet das? In DelphiX gibt es doch gleich mehrere Funktionen für Alpha Blending (DrawAlpha, Eins von den Samples, ...)
Machen diese Teile kein "echtes" Alpha Blending?

IMHO kann DD nur s/w-Masken, und keine Graustufen-Alphakanäle verarbeiten. Dass heisst: Volltransparente Bildteile, oder nichttransparente - keine Zwischenstufen die du für Antialiasing ja unbedingt brauchst.

Was Oxmyx schreibt klingt interessant; in diese Richtung würde ich dann auch weiter suchen. Ich habe bisher überall nur den Tipp gefunden: "Mach's mit Direct3D/OpenGL."

Gruss,
Fabian

Flogo 6. Dez 2004 19:22

Re: Alphakanal in DelphiX
 
Ich habe bis jetzt DelphiX benutzt. Kapselt das die DirectDraw Methoden?
Wenn ich jetzt nur aus Qualitätsgründen (Graustufen statt s/w Maske) auf D3D umsteigen würde, wüsste ich nicht mehr, wie ich die Kollisionen, Animationen, usw. regeln sollte. Müsste man das dann alles "von Hand" nachschreiben? :pale:
Außerdem hab ich keine Ahnung was RHW-Vertizes sind. :oops:

Oxmyx 7. Dez 2004 14:11

Re: Alphakanal in DelphiX
 
RHW-Vertizes sind bereits transformiert und beleuchtet, d.h. sie werden nicht mehr durch die Transformationspipeline gewurstelt, sondern direkt an den Rasterizer übergeben. Weil sie also nicht mehr transformiert und beleuchtet werden, zeichnet der Rasterizer sie exakt so auf den Bildschirm, wie er sie empfängt. Wenn man also als Koordinaten die Bildschirmkoordinaten angibt, werden die Vertizes auch exakt an dieser Stelle auf dem Bildschirm erscheinen.

Um ein Bild (128x128 Pixel) an der Bildschirmposition 100, 100 darzustellen, zeichnet man einfach zwei Dreiecke, die folgende 3D-Koordinaten haben:
Code:
(100,100,1)    (228,100,1)
         _______
        |      /|
        |    /  |
        |  /    |
        |/______|
(100,228,1)    (228,228,1)
Die dritte Komponente ist deshalb nötig, weil es ja insgeheim trotzdem 3D-Vektoren sind, auch wenn es 2-dimensional gezeichnet wird.

Nun legt man noch die Texturkoordinaten für die Fläche fest:
Code:
(0,0)    (1,0)
    _______
   |      /|
   |    /  |
   |  /    |
   |/______|
(0,1)    (1,1)
Dann lädt man eine Textur, aktiviert sie und rendert das ganze. Schon hat man ein 2D-Bild.

Eine Animation kann man ganz einfach erstellen, indem man die Einzelbilder hintereinander in einer Textur speichert, und die Texturkoordinaten so anpasst, dass immer ein einzelnes Bild aus der Textur "herausgepickt" wird.

Und die Kollisionen laufen ja wahrscheinlich sowieso mathematisch ab, da ist es unerheblich, wie die Grafik dargestellt wird.

Flogo 7. Dez 2004 18:56

Re: Alphakanal in DelphiX
 
Erst mal danke für die ausführliche Antwort. Ich versteh zwar immer noch nicht alles (Transformationspipeline?) aber ich denke das Prinzip ist jetzt klar.
Mein Problem ist aber, dass ich im Moment alles in DelphiX geschrieben hab und nicht ganz weiß, wie ich diesen Ansatz da jetzt einbauen könnte.
Sind diese RHW-Vertizes in irgendeiner Unit gekapselt? Wenn ja in welcher?
Könnte ich das Zeichnen von den Vertizes in die onDraw() Methoden der ImageSprites die ich benutze reinschreiben?
Würde die Kollision (von DelphiX) dann immer noch tun, oder müsste ich die selber schreiben?

Oxmyx 7. Dez 2004 19:05

Re: Alphakanal in DelphiX
 
Ich denke mal "Nein" zu allem. ;)

Das hat überhaupt nichts mehr mit DirectDraw oder Sprites zu tun, und ich glaube auch nicht, dass DelphiX mit DirectX 7 bereits das Zeichnen mit transformierten und beleuchteten Vertizes kann.
Ich würde aber so früh wie möglich auf DirectX 9 umsteigen, denn DirectX hat sich im Vergleich zur Version 7 grundlegend verändert und verbessert.

Flogo 7. Dez 2004 22:11

Re: Alphakanal in DelphiX
 
Ok! Schade! Ich denke das ist mir im Moment noch alles zu hoch. Vielleicht kommt das Antialising dann in die Version 2.0 mit rein ;-)

Trotzdem vielen Dank, dass du dir die Zeit genommen hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 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-2025 by Thomas Breitkreuz