Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Andorra 2D] Licht - stufiger Übergang realisieren (https://www.delphipraxis.net/154186-%5Bandorra-2d%5D-licht-stufiger-uebergang-realisieren.html)

sabbert 31. Aug 2010 12:26

[Andorra 2D] Licht - stufiger Übergang realisieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

undzwar habe ich eine erneute Frage zu dem Thema Licht bzw. Lampe generell oder hier Andorra 2D.

Alter Fragethread : hier

Ich habe es geschafft eine Taschenlampe zu erstellen und weitere normale Lampen, die ich gebrauche, um einige Stellen in meinem Level zu erleuchten ( siehe Bild im Anhang).

Das klappt wunderbar nur sieht das grafisch nicht unbedingt "super" aus.

Mit "super" meine ich, ob es möglich wäre eine Art Übergang zwischen Licht und "Dunkelheit" zu erschaffen.

Das Licht soll sozusagen Stufenweise dunkler werden...

Weiß aber nicht genau wie ich das machen soll :( Habe versucht die Maske so zu Zeichnen das ein Schwarz/Weißer Kreis entsteht, der innen weiß ist und nach außen hin dunkler wird. Nur bringt dies leider nichts, es ist trotzdem alles hell xD

Wie ist so ein "Stufiger Übergang" in Andorra 2D realisierbar?

mfg

blackfin 31. Aug 2010 12:30

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Wenn du die Maske über den Stencil-Buffer gemacht hast, kannst du damit keine Übergänge bilden, da der Stencil-Buffer ein 1-Bit-Puffer ist (0/1).

Allerdings könntest du doch innerhalb der Maske (also im hellen Bereich) eine Textur mit Alphakanal überblenden, die einen nach aussen hin dunkler werdenden Kreis darstellt (Gradient-Circle).
Wie man das allerdings mit Andorra macht, keine Ahnung. Ich denke aber, das unterstützt ja auch irgendwie Blending.

Namenloser 31. Aug 2010 12:38

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Ich würde die Maske auf eine Textur zeichnen und anschließend diese Textur multiplikativ auf die Zeichenfläche anwenden. Wie das mit Andorra 2D geht, weiß ich aber nicht.

igel457 31. Aug 2010 14:55

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Du kannst mit dem Canvas nochmal die gleiche Figur mit einem Gradient drüber zeichnen - zumindest für die kreisförmigen Lichter sollte das kein Problem sein. Setze dafür die äußere Farbe auf "Ad_ARGB(255, 0, 0, 0)" und die innere auf "Ad_ARGB(0, 0, 0, 0)". Siehe hierfür das Canvas-Tutorial.

Ein Problem hast du nur, wenn sich zwei Lichtquellen überschneiden. Normalerweise wird das so gelöst, dass du die Szene für jedes Licht einzeln in einen Off-Screen-Buffer (TAdRenderTargetTexture) zeichnest und das Ergebnis additiv auf das Ergebnis additiv auf den eigentlichen ausgabe Puffer blendest. Hierdurch verstärken sich die einzelnen Lichtquellen. Du kannst dir hierzu die "Surface" Demo anschauen.

Am besten löst du aber erstmal das Problem mit den Gradienten und gib bescheid wenn du mit zweiterem nicht weiter kommst.

Edit: Die Lösung von NamenLozer ist eigentlich viel eleganter: Hier zeichnest du auf ein Schwarzes Surface allgemein nur deine Lichter additiv (mit dem Gradienten wie oben beschrieben) und mulitiplizierst das Ergebnis mit der kompletten Szene. Nur multiplikatives Zeichnen muss noch ein die Plugins eingebaut werden (ist aber mit wenigen Zeilen erledigt):

Erstmal musst du in der AdClasses Zeile 117 den Modus "bmMultiply" hinzufügen. Im OpenGL-Plugin (/dll/OpenGL/OGLMain.pas) Zeile 642
Delphi-Quellcode:
bmMultiply: glBlendFunc(GL_DST_COLOR, GL_ZERO);
schreiben, im DirectX-Plugin (/dll/DirectX/DX3DMain.pas) Zeile 767
Delphi-Quellcode:
if ABlendMode = bmMultiply then begin
Direct3DDevice9.SetRenderState(D3DRS_SRCBLEND,D3DBLEND_DESTCOLOR);
Direct3DDevice9.SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ZERO);
end;
. Dann beide Plugins neu Compilieren und fertig.

himitsu 31. Aug 2010 15:16

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Und wenn man die Gradienden erstmal auf ein schwarzes Bild aditiv draufmalt und diese gemeinsamme Bild dann über die Szene drüberlegt?

igel457 31. Aug 2010 16:36

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Es sollte schwerer werden den Alpha-Kanal an den richtigen Stellen transparent zu kriegen... Mit der Multiply-Lösung ist aber auch der Vorteil gegeben, dass die Lichter unterschiedliche Farben haben können.

sabbert 31. Aug 2010 23:28

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
ok danke erstmal für die Hilfe

Habe es geschafft für die Kreise Gradients zu erzeugen...

Für das Polygon leider noch nicht.

Habe bei dem zweiten Probleme. Die Codes hab ich eingefügt nur beim Kompilieren der dlls komme ich nicht weiter.

Erst fehlten Units, die ich mir dann besorgt habe. Doch Delphi will jedesmal wenn ich Kompiliere eine HostAnwendung in den Paramtern eingegeben haben oO

Was muss ich tun :D

Looper 1. Sep 2010 00:09

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Bei Start|Parameter muss man die dllhost.exe einfügen.
Zu finden im system32 Ordner. Jedenfalls lief das bei mir dann immer :wink:

Neutral General 1. Sep 2010 07:25

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Du kannst auch die DLL einfach erzeugen mit Shift-F9 oder Projekt--> <Projektname> erzeugen.
Dann brauchst du keine Hostanwendung.

sabbert 1. Sep 2010 14:19

AW: [Andorra 2D] Licht - stufiger Übergang realisieren
 
Hab das geschafft danke ;-)

Zitat:

Zitat von igel457 (Beitrag 1046362)
Edit: Die Lösung von NamenLozer ist eigentlich viel eleganter: Hier zeichnest du auf ein Schwarzes Surface allgemein nur deine Lichter additiv (mit dem Gradienten wie oben beschrieben) und mulitiplizierst das Ergebnis mit der kompletten Szene.

Versteh das noch nicht so ganz mit dem dem "Ergebnis multiplizieren"...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 1 von 2  1 2      

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