AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra 2D] Licht - stufiger Übergang realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra 2D] Licht - stufiger Übergang realisieren

Ein Thema von sabbert · begonnen am 31. Aug 2010 · letzter Beitrag vom 2. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#1

[Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 31. Aug 2010, 13:26
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
Miniaturansicht angehängter Grafiken
lampen.jpg  
Christian
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 31. Aug 2010, 13:30
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.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 31. Aug 2010, 13:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 31. Aug 2010, 15:55
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 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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein

Geändert von igel457 (31. Aug 2010 um 16:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 31. Aug 2010, 16:16
Und wenn man die Gradienden erstmal auf ein schwarzes Bild aditiv draufmalt und diese gemeinsamme Bild dann über die Szene drüberlegt?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 31. Aug 2010, 17:36
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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#7

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 1. Sep 2010, 00:28
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
Christian
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#8

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 1. Sep 2010, 01:09
Bei Start|Parameter muss man die dllhost.exe einfügen.
Zu finden im system32 Ordner. Jedenfalls lief das bei mir dann immer
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 1. Sep 2010, 08:25
Du kannst auch die DLL einfach erzeugen mit Shift-F9 oder Projekt--> <Projektname> erzeugen.
Dann brauchst du keine Hostanwendung.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#10

AW: [Andorra 2D] Licht - stufiger Übergang realisieren

  Alt 1. Sep 2010, 15:19
Hab das geschafft danke

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"...
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:57 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