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 2 von 2     12   
Benutzerbild von igel457
igel457

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

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

  Alt 1. Sep 2010, 15:45
Also... du erstellst ein Surface von der Größe des Fensters (wie das geht, ist in der Surface Demo gezeigt) - bei einem Surface handelt es sich um eine Textur, auf die du mit allen anderen Andorra 2D Befehlen drauf Zeichnen kannst - auch das TAdDraw ist ein solches Surface, nur das dessen Inhalte direkt auf den Bildschirm gezeichnet werden.

1. Surface erstellen:
Delphi-Quellcode:
AdSurface := TAdTextureSurface.Create(AdDraw);
AdSurface.SetSize(AdDraw.Width, AdDraw.Height);
2. In der Spieleschleife:
Delphi-Quellcode:
AdSurface.Clear(clBlack);
//Zeichne nun deine Lichter auf das Surface (mit AdSurface.Canvas), wobei du
//AdSurface.Canvas.Brush.BlendMode auf bmAdd stellst. Durch das "bmAdd" addieren
//sich die Farbwerte der Lichter korrekt auf, wenn sie sich überschneiden
4. Zeichne dein Spielfeld ohne Stencilbuffer (den brauchen wir nicht mehr) auf das AdDraw

5. Zeichne das Surface nun multiplikativ auf das Spielfeld. Das hat folgenden Effekt: Die Farbwerte eines jeden Surface-Pixels werden mit dem darunterliegenden Pixel multipliziert: Wo das Surface weiß war (1.0, 1.0, 1.0) wird die Farbe des darunterliegenden Pixels übernommen (da x * 1.0 = x), wo das Surface schwarz war (0.0, 0.0, 0.0) wird auch der darunterliegende Pixel schwarz.
Delphi-Quellcode:
var
  r: TAdRect;

r := AdDraw.SurfaceRect;
AdSurface.Image.DrawEx(AdDraw, r, r, 0, 0, 0, 255, bmMultiply);
Hoffe dir hilft das
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
 
#12

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

  Alt 2. Sep 2010, 00:26
So habe alle gemacht, aber es scheint leider nicht zu Funktionieren

Es ist alles schwarz, bis auf Taschenlampe(ohne Gradient). Sobald ich keine Gradient-Kreise zeichne werden die Lichter zwar angezeigt aber natürlich ohne den gewünschten Effekt...

Delphi-Quellcode:
     if Map.Licht then //Nur zu Testzwecken
     begin

      AdDraw.Options := AdDraw.Options + [aoLight];
      AdDraw.Scene.AmbientColor := Ad_ARGB(0, 0, 0, 0);

      //Scene einmal zeichnen
      AdSpriteEngine.Draw;

      AdDraw.Options := AdDraw.Options - [aoLight];

      AdSurface.ClearSurface(clBlack);


      AdSurface.Canvas.Brush.BlendMode := bmAdd;

      //Zeichnet weiße Kreise um alle Lampen (Licht)
      Map.Lichtanzeigen(AdSurface);

      //Zeichnet das Taschenlampelicht in weiß
      Figur.Lampe.zeichne(AdSurface);

      //Zeichnet gradient-Kreise um alle Lampen (Schwarz/weiß)
      Map.LichtanzeigenGradient(AdSurface);

      r := AdDraw.SurfaceRect;
      AdSurface.Image.DrawEx(AdDraw, r, r, 0, 0, 0, 255, bmMultiply);


      //Szene zeichnen
      AdSpriteEngine.Draw;

     end else AdSpriteEngine.Draw;
Was ist falsch an dem Code?!
Hab die neuen Dll's in den Ordner kopiert...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

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

  Alt 2. Sep 2010, 10:00
Du musst erst die Spriteengine auf das AdDraw zeichnen und dann das Surface mit dem Ergebnis multiplizieren:
Delphi-Quellcode:
AdDraw.Activate;
AdSpriteEngine.Draw;

AdSurface.Image.Draw(AdDraw, ..., bmMultiply);
Wenn das nicht funktioniert, überprüfe ob der Inhalt des Surfaces (also nur die Lichter) korrekt gezeichnet werden, wenn du bmAlpha als BlendMode angibst.
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
 
#14

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

  Alt 2. Sep 2010, 16:07
Jo danke hat geklappt

Sieht schon besser aus hab mal ein Testbild angehängt, wo einfach ein paar Lampen nebeneinander sind.

Muss jetzt nurnoch die Taschenlampe versuchen Gradient zu zeichnen hat noch nicht so geklappt
Miniaturansicht angehängter Grafiken
lampentest.jpg  
Christian
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

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

  Alt 2. Sep 2010, 16:51
Hey, das sieht ja gar nicht mal so schlecht aus, dafür, dass ich den Code für die Grafikplugins nicht getestet habe

Du solltest - entsprechende Grafiken für das Terrain vorausgesetzt - recht coole Effekte herstellen können - schließlich können die Lampen jede beliebige Lichtfarbe haben und auch flackern etc.
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
Benutzerbild von igel457
igel457

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

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

  Alt 2. Sep 2010, 17:26
Muss jetzt nurnoch die Taschenlampe versuchen Gradient zu zeichnen hat noch nicht so geklappt
Ich würde dafür an deiner Stelle den Taschenlampenkegel als vorgefertigtes Bild nehmen und dieses entsprechend Rotiert zeichnen, mit der "TAdImage.DrawRotateAdd" funktion - mit dem Canvas wird das weniger gut funktionieren.
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
Namenloser

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

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

  Alt 2. Sep 2010, 17:28
Oder mit dem Stencilbuffer den Lichtkegel maskieren und dann vom Mittelpunkt aus einen ausfadenden Kreis im Radius des Kegels zeichnen.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

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

  Alt 2. Sep 2010, 17:32
Klingt auch nach einer guten Lösung, doch Surfaces (FBOs) und Stencilbuffer gleichzeitig sind eine Sache, bei der ich nicht garantieren kann, dass sie funktioniert (ich bin mir auf jeden Fall nicht sicher, ob ich es je getestet habe)
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
Antwort Antwort
Seite 2 von 2     12   


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