# [LWJGL] 2D Tunneler Hintergrund



## Kroko309 (9. Jan 2015)

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?


----------



## Kroko309 (20. Jan 2015)

Wenn Sie wissen wollen, wie das originales spiel von Geoffrey Silverton ausssah, hier ist der Link:
Tunneler download | DosGames.sk - staré hry zdarma ke sta

Dass var das spiel meiner kindheit. Fileicht erinert sich noch jemand . 

Bitte gibt mir ein paar ratschlaege.


----------



## Network (21. Jan 2015)

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


----------



## Kroko309 (21. Jan 2015)

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.


----------



## Kroko309 (30. Jan 2015)

Hallo,
ich schon wieder. Ich habe mir die FBO-s angesehen jedoch verstehe ich nicht, wie ich die FBO-s nutzen kann um mein ziel zu ereichen. Dass hintergrund muss anpassbar/zerstörbar sein. So wie in dem spiel "Wo ist mein wasser" fuer android. (https://play.google.com/store/apps/details?id=com.disney.WMWLite)
Gibt es dafuer irgentvelche deutschen tutorials wo genau oder zumindest etwas  ähnliches gezeigt wird???


----------



## Network (31. Jan 2015)

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.


----------



## Kroko309 (14. Mrz 2015)

Hallo schon wieder,
Ich habe versucht ein gutes tutorial fuer das FBO zu finden. Jedoch ich habe nur solche gefunden wo esi in 3D is oder in c++ geschrieben. Das Problem dabei ist, dass ich c++ nicht kenne und das ich noch in 3D auch nicht programmieren kann.
Ich hebe diese beispiele ferzucht zu verstehen:
Using Frame Buffer Objects (FBO) - LWJGL
Render to Texture with Frame Buffer Objects (FBO) - LWJGL

Kent ihr kein tutorial das in der 2D gemacht ist und mit java?

Danke.


----------



## Kroko309 (17. Mrz 2015)

Kroko309 hat gesagt.:


> Jedoch ich habe nur solche gefunden wo esi in 3D is oder in c++ geschrieben.


Ich wolte sagen Jedoch habe ich nur solche gefunden wo es fuer 3D ist oder in c++ geschrieben ist.


----------

