Einzelnen Beitrag anzeigen

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, 14: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 15:16 Uhr)
  Mit Zitat antworten Zitat