Transparenz, Licht, Funken usw.

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

koril-k

Betreff: Transparenz, Licht, Funken usw.

BeitragMi, Jul 28, 2010 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Demnächst möchte ich mich gern mit Lichteffekten vertraut machen, also Funken oder Transparenz (im Sinne von z.B. farbigem Glas) oder auch zuckenden Blitzen. Ich bin diesbezüglich allerdings gänzlich unerfahren und wollte euch mal fragen, was an Lichteffekten in einem 2D-System wie BlitzMax in Echtzeit möglich ist und wie die grundlegenden Ansätze dafür sind (über Details zerbreche ich mir gern selbst den Kopf).
 

TheGamePope

BeitragMi, Jul 28, 2010 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Also. Bei lichtefekten, wären vorrausichtlich masken mit einer transparenz das beste. Transparenz geht volgendermasen:
BlitzMax: [AUSKLAPPEN]

Const LIGHT_ALPHA# = 0.3 'Wert geht von 0 (Völlig transparent) bis 1 (Solid)
'Nur um das nachher wieder herzustellen
Local _lastalpha#, _lastblend
_lastalpha = GetAlpha()
_lastBlend = GetBlend()
SetBlend(LIGHTBLEND) 'Benötigt für SetAlpha, das is für licht, für glas würd ich SHADEBLEND nehmen
SetAlpha(LIGHT_ALPHA) 'Bewirkt die transparenz
DrawImage(deineMaske)
'wiederherstellung der alten werte
SetBlend(_lastBlend)
SetAlpha(_lastAlpha)


Bei funken oder so kann ich dir leider nicht helfen. Das hier ist übrigens nur ein kurz ausgedachte grundidee
  • Zuletzt bearbeitet von TheGamePope am Mi, Jul 28, 2010 15:38, insgesamt 2-mal bearbeitet

Goodjee

BeitragMi, Jul 28, 2010 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
für licht solltest du den Blendmode aber eher auf LIGHTBLEND statt ALPHABLEND setzen
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

TheGamePope

BeitragMi, Jul 28, 2010 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Geändert

koril-k

BeitragMi, Jul 28, 2010 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, das scheint sehr einfach zu sein!

So wie ich das beim rumprobieren (fand leider keine nützlichen Infos in der Doku) gesehen habe, bestimmt SHADEBLEND eine Art Lichtfilter, d.h. zeichne ich mit SHADEBLEND einen Pixel in der Farbe r,g,b (in Prozent umgedacht) so werden vom überdeckten Pixel (R,G,B) (in 0 bis 255) die Farbanteile r% von R, g% von G und b% von B als Resultat verwendet, so wie man es eben z.B. von farbigem Glas kennt. Die genaue Funktionsweise von LIGHTBLEND und ALPHABLEND (vor allem der inhaltliche Unterschied / wann nutze ich was?) ist mir nicht ganz aufgegangen. Zwar stehen in der Hilfe kurze Notizen der Form "ALPHABLEND Pixels are alpha blended with existing backbuffer pixels" aber daraus werde ich nicht schlau.

mpmxyz

BeitragMi, Jul 28, 2010 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal eine kleine Beschreibung, was was macht:
Code: [AUSKLAPPEN]
SOLIDBLEND: Alle Pixel werden ohne jede Transparenz gezeichnet.
MASKBLEND: Es gibt nur zwei Tranzparenzstufen: 100% transparent und undurchsichtig
ALPHABLEND: Es werden alle Transparenzstufen entsprechend dargestellt. (Der Alphawert ist die Undurchsichtigkeit.)
LIGHTBLEND: Die Farbwerte des Bildes werden beim Zeichnen auf die der Zeichenstelle aufaddiert.
SHADEBLEND: Die Farbwerte des Bildes werden mit denen der Zeichenstelle multipliziert. (Man geht hier von Werten von 0 bis 1 aus.)

MASKBLEND kann man eigentlich nur gebrauchen, wenn einem das Zeichnen mit Transparenz zu zu verwaschenen Ergebnissen führt. (z.B. bei Schriften)
ALPHABLEND ist vor allem wichtig, wenn man Bilder mit transparenten Stellen zeichnen möchte.
LIGHTBLEND und SHADEBLEND kann man für verschiedene Effekte verwenden.
Ersteres würde ich für geisterhafte Erscheinungen und - dem Namen entsprechend - für leuchtende Objekte verwenden.
SHADEBLEND würde ich zum Beispiel zum Erstellen von einer Art Beleuchtung nutzen:
Als erstes rendert man alle Lichter mit LIGHTBLEND zusammen.
Das Ergebnis speichert man mit GrabImage in einem Bild.
Cls.
Dann zeichnet man seine Objekte und danach zeichnet man das vorher berechnete Lichtbild mit SHADEBLEND darüber. -> Man hat ein beleuchtetes Bild.
Edit: Ein Glaseffekt besteht eigentlich aus zwei Teilen. Mit SHADEBLEND als ersten Schritt bestimmt man den Anteil des Lichtes, der durch das Glas scheint. Mit LIGHTBLEND als zweiten Schritt bestimmt man den Anteil des Lichtes, welcher von dem Glas reflektiert wird.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group