[C/SDL] Licht und Schatten

cwriter

Erfahrenes Mitglied
Hallo Welt

Ich arbeite nun schon ein Weilchen an einem kleinen Funprojekt mit SDL, um den Umgang mit Bildern (meist Bitmaps) ein wenig zu üben.
Wie gesagt, Funprojekt, ganz ohne Optimierungen und mit jeder Menge Spaghetticode (wie man es von mir eben kennt...).
Es soll dennoch eine einfache 2d-Game-Engine werden, und hier beginnen die Probleme: Das Ganze läuft - zu meiner Überraschung - in 1920*1080 Pixeln flüssig auf 30 fps. Doch nun will ich auch Licht und Schatten einbringen, ganz simpel, ohne Penumbra.
Mein Ansatz war, von einem Punkt kleine Vierecke loszuschicken, die durch Verringerung des Alpha-Channels immer dunkler werden, je weiter sie sich vom Startpunkt entfernen. Wenn sie auf ein Objekt treffen, bricht der Vorgang sofort ab.
Dann wird er "Abschusswinkel" vergrössert, bis er 360° beträgt.
Wie ihr euch denken könnt: Das braucht extrem viel Leistung und was vorhin auf den gelockten 30fps lief, lief nun auf 3 fps.

Viel Geschwafel, nun zur Frage:
Wie würdet ihr ein Lighting-System in SDL (Version 2) realisieren? Würdet ihr den Umweg über OpenGL gehen? Oder habt ihr sonstige Anregungen zu dem Thema?

Ich freue mich auf eure Anregungen!
cwriter
 
Hallo cwriter,
die Technik die du ansprichst, ist bei einfachen 2D-Beleuchtungssystemen öfter anzutreffen. Das ganze ist eine Art simples Raytracing. Warum du nur 3fps rausbekommst, wird vermutlich daran liegen dass dein Code nicht besonders optimiert ist?:D
Schau mal hier: http://www.dannybirch.com/simple-2d-lighting-system/
Der zeigt sehr schön wie man so etwas realisieren kann und erklärt auch die Mathematik hintendran. :eek:

Falls du eines Tages die Lust verspürst noch etwas tiefer in die Materie einzusteigen sag bescheid, denn statt Raytracing kann man auch approximative Methoden verwenden, die laufen hunderte Male schneller.

Bis dahin viel Erfolg! ;-)
Gruß Technipion
 
Hallo Technipion

Ich habe es nun noch einmal ausprobiert: Das Programm läuft auf 4x 0.77 GHz und einer integrierten Graphik auf ~230 fps. Kommt jedoch mein Lichtsystem hinzu, bricht es auf 3 fps runter. Auf voller Leistung ist es immerhin 12 fps, aber das ist ein High-End PC...

Der Code ist lediglich compilerseitig optimiert ;-)
Ein Problem ist noch, dass ich Berechnung und "Zeichnung" beides im Render-Loop mache. Eine Optimierung liegt daher sicher noch drin, denn die Quadrate, die gerendert werden, machen den Löwenanteil aus. Grössere Quadrate würden in mehr Leistung resultieren.

Wenn ich das sowieso überdenken muss, wäre die Annäherungsvariante durchaus interessant. Ich werde mal googeln ;-)

Gruss
cwriter

/EDIT: Zudem habe ich gerade gemerkt, dass ich noch SDL 1.2.* verwende, das noch keine Hardwarebeschleunigung bietet. Jetzt muss ich erstmal alten Code umschreiben *grmml*.
 
Zuletzt bearbeitet:
Zurück