[LWJGL] 2D Tunneler Hintergrund

Kroko309

Mitglied
Ich versuche, ein Spiel "Tunneler" zu machen. Allerdings habe ich ein Problem. Mein Panzer hat folgende Dimensionen 32x32 und Land Dimensionen sind 4*4. Ich mache das so das ich GL11.GL_QUADS(4x4) mit zufälligen farben mit "for" so lange rendere bis das ganze fenster bemalt ist. Es dauert zu lange und mein spiel ist zu langsam.
Da wo mein Panzer hin fahrt, muss ich das terrain als hintergrund bemalen(schwartz). Damit dass aussieht wie wenn der Panzer das terrain durchbohrt.
Ich môchte eueren rat, keinen quelcode. Entschuldigung für meine gramatik, ich bin aus Slowakei.

Meine fragen 😳 :
1. Was für einen besseren weg gibt es um so ein hintergrund zu machen?
2. Gibt es eine besere môglichkeit mit dem Panzer dass terrain zu beeinflusen?
3. Ich kann das nicht mal googeln weil ich nicht die richtige frage stelen kann ???:L ... Wie soll ich Google fragen?
 
Verstehe.
Gut dass du das Beispielprogramm noch dazu gegeben hast sonst könnte ich dir jetzt nicht helfen.

> Dein Problem hat jetzt erstmal verschiedene Ansätze.
1.) FrameBufferObjects oder kurz FBOs - Das sind Objekte mit derren Hilfe du nicht auf den Bildschirm sondern direkt auf eine Textur rendern kannst.
Anstatt millionen kleine Quads zu zeichnen jeden Frame, bietet es sich bei 2D-Spielen an statische Objekte (wie z.B. der Hintergrund) in einen FBO einmalig zu zeichnen und dann nur einmal ein großes Quad mit dem FBO als Textur zu zeichnen.
Gegebenfalls musst du je nach Kartengröße mehrere FBOs erstellen um die gesammte Karte abzudecken.

2.) Frustum Culling - D.h. auf der CPU berechnen welche deiner Quader (FBOs) überhaupt im Moment sichtbar sind und dann nur die entsprechend sichtbaren zeichnen
 
Zunächst danke für den Rat, ich werde darüber etwas googeln und es ausprobieren.
Fals noch jemanden etwas einfahlt bite schreibt ruhig weiter.
 
Ein FBO ist eine variable Textur, bzw. eine bemalbare Textur.
Den Hintergrund in kleinere FBOs aufteilen, den Hintergrund auf die FBOs zeichnen und sobald sich ein oder mehrere Pixel ändert das entsprechende FBO an der Stelle verändern (z.B. den Alpha-Wert dieser Pixel an dieser Stelle auf 0 setzen).
Fertig.

Das Problem ist wie bereits angesprochen dass du nicht jeden Pixel einzeln zeichnen kannst, das überfordert die GPU, deshalb FBOs um den Zeichenprozess zu buffern.
- Normalerweise würdest du bei jedem Frame jeden einzelnen Pixel zeichnen, und Pixel die eliminiert wurden werden beim zeichnen einfach überspringen. -> Schlechte Performance
- Mit FBOs zeichnest du die Pixel einmal am Anfang des Programmes auf den FBO und jeden Frame zeichnest du dann statt jeden einzelnen Pixel nur das FBO auf dem die Pixel bereits gezeichnet wurden.
Wenn jetzt einzelne Pixel nicht mehr gezeichnet werden sollen dann veränderst du den FBO.
Das ganze invertiert sozusagen den Arbeitsaufwand, statt alles jeden Frame zu zeichnen, radierst du stattdessen einzelne Pixel einmalig aus die du nicht mehr benötigst.

Das ist eine der Möglichkeiten.

Ein ähnliches Spiel wie "Wo ist mein Wasser" ist eine Tech-Demo von Google für ihre Wasser und Physik-Library für Android, heißt "LiquidFun Paint"
Den Source-Code dafür kannst du hier finden
https://github.com/google/liquidfunpaint
Auch wenn es hier eigentlich darum geht die Wasser-Simulation zu demonstrieren, könnte das für dich ganz interessant sein.
 

Neue Themen


Zurück
Oben