[Projekt] WaterBreakout
Verfasst: 16.07.2011, 15:55
Bei WaterBreakout handelt es sich um mein neustes Projekt, das im Rahmen des Grafikpraktikums während des Studiums mit 2 Kommilitonen entstanden ist.
Zunächst einmal ein paar bunte Bilder, weil die jeder mag: Das Spielprinzip dürfte allgemein bekannt sein. Man steuert ein Paddel (das grüne Ding, unten) und muss die Bälle im Spielfeld halten. Die zerstören die Blöcke, sind alle kaputt, kommt man ins nächste Level. Lässt man den Ball nach unten durchfallen, verliert man ein Leben, und so weiter und so fort.
Interessant wird das ganze natürlich erst durch Spezialblöcke. Wir haben folgende eingebaut:
- Normaler Block: Gibt es in verschiedenen Farben, die unterschiedlich viele Treffer aushalten
- Ball Block: Erzeugt beim Zerstören einen zweiten Ball, der dann mit durchs Level fliegt
- Extra Block: Erzeugt beim Zerstören ein Extra, (das goldene Ding im vierten Bild) welches wie die Bälle durch das Level fliegt, und mit dem Paddel eingesammelt werden muss, was eine Menge Extrapunkte gibt
- Explosions Block: Eine Bombe die beim Treffen alle in der Nähe befindlichen Blöcke beschädigt. Natürlich sind Kettenreaktionen möglich und wenn sich im Explosionsradius Ball-Blöcke oder Extra-Blöcke befinden, kann das Spielfeld schon ziemlich voll werden :)
Das ganze wurde in 4 Wochen zu dritt umgesetzt. Mein Fokus lag dabei hauptsächlich am Wasser, weil ich schon länger mal einen hübschen Wassershader schreiben wollte. Dafür render ich eine Reflection und eine Refraction Textur, die ich je nach Blickwinkel anzeige, durch den Normalvektor werden diese noch etwas verzerrt. Die Wellen sind dynamsich, 4 Sinusfunktionen im Vertexshader und nochmal 4 kleiner im Fragment Shader, im Prinzip nach folgendem Artikel:
http://http.developer.nvidia.com/GPUGem ... _ch01.html
Aus zeitlichen Gründen hab ich aber so ziemlich die einfachste Variante umgesetzt. Dazu kommt noch ein bisschen spekulares Licht, was vielleicht auch noch ein wenig Feintuning benötigt hätte, aber es sieht besser aus, als ohne :)
Ein Kommilitone von mir hat bei der Spiellogik mitgeholfen und wollte dynamsiche CubeMaps für die Bälle einbauen, was aber leider nicht mehr funktioniert hat. Der andere hat sich um das Partikelsystem gekümmert, was aber leider auch nicht so ganz funktioniert hat, weswegen ich am Tag vor der Abgabe noch ein neues, grauenhaft langsames, gebastelt habe. Ich hatte hier ja noch extra einen Thread aufgemacht, hatte dann aber keine Zeit mehr, für die guten Techniken. Die Effekte sind deshalb auch ein wenig rudimentär, mit dem Rauch nach den Explosionen bin ich eigentlich sehr zufrieden, aber die Explosionen selber müssten wirklich noch etwas hübscher werden. Die ganzen kleinen Punkte platzen von den Blöcken ab, wenn diese getroffen werden, und haben jeweils die Farbe des Blocks, was ab und zu lustige bunte Wolken ergibt, wenn man mehrere Blöcke in kurzer Zeit trifft.
Umgesetzt wurde das ganze mit OpenGL und Qt. Ansonsten wird boost und glew benutzt.
Die Umgebung ist ein statisches Modell, welches aus einer Wavefront Obj Datei geladen wird. Zum Modellieren wurde Blender benutzt, die Spielobjekte sind alle von mir, die Wüste mit Palmen, Pflanzen und Steine ist eine Komposition aus Modellen von BlendSwap. Die Schatten sind das Ergebnis der tollen Bake-Funktion von Blender die gerade für so etwas wirklich gut zu gebrauchen ist.
Wer das ganze mal ausprobieren möchte, hier gibts die Windows Executables:
http://www.C3-Soft.de/WaterBreakout/WaterBreakout.zip
(man beachte: Qt war nicht so super für die Maussteuerung, weshalb mit Maus mit einem kleinen Hack eingefangen wird. Näheres steht in der Readme)
Ich persönlich hab vor, das ganze noch etwas weiter zu entwickeln. Die Spiellogik ist eigentlich schön flexibel geworden (es gibt z.B ein Level mit 2 Paddeln) und ich hab noch eine ganze Menge anderer Ideen, was man cooles einbauen könnte. Am Wasser könnte man auch nochmal arbeiten, wenn da jemand noch super Tips für mich hat, freue ich mich, davon zu hören. Wer sich für die Implementierung interessiert, die Shader werden aus Textdateien geladen, außerdem wird das ganze evtl. OpenSource. Ich würde es auch gerne von Qt auf glfw umstellen, für Vollbildmodus und bessere Maussteuerung. Achja und ich hab natürlich noch ein effizientes Partikelsystem zu implementieren!
Zunächst einmal ein paar bunte Bilder, weil die jeder mag: Das Spielprinzip dürfte allgemein bekannt sein. Man steuert ein Paddel (das grüne Ding, unten) und muss die Bälle im Spielfeld halten. Die zerstören die Blöcke, sind alle kaputt, kommt man ins nächste Level. Lässt man den Ball nach unten durchfallen, verliert man ein Leben, und so weiter und so fort.
Interessant wird das ganze natürlich erst durch Spezialblöcke. Wir haben folgende eingebaut:
- Normaler Block: Gibt es in verschiedenen Farben, die unterschiedlich viele Treffer aushalten
- Ball Block: Erzeugt beim Zerstören einen zweiten Ball, der dann mit durchs Level fliegt
- Extra Block: Erzeugt beim Zerstören ein Extra, (das goldene Ding im vierten Bild) welches wie die Bälle durch das Level fliegt, und mit dem Paddel eingesammelt werden muss, was eine Menge Extrapunkte gibt
- Explosions Block: Eine Bombe die beim Treffen alle in der Nähe befindlichen Blöcke beschädigt. Natürlich sind Kettenreaktionen möglich und wenn sich im Explosionsradius Ball-Blöcke oder Extra-Blöcke befinden, kann das Spielfeld schon ziemlich voll werden :)
Das ganze wurde in 4 Wochen zu dritt umgesetzt. Mein Fokus lag dabei hauptsächlich am Wasser, weil ich schon länger mal einen hübschen Wassershader schreiben wollte. Dafür render ich eine Reflection und eine Refraction Textur, die ich je nach Blickwinkel anzeige, durch den Normalvektor werden diese noch etwas verzerrt. Die Wellen sind dynamsich, 4 Sinusfunktionen im Vertexshader und nochmal 4 kleiner im Fragment Shader, im Prinzip nach folgendem Artikel:
http://http.developer.nvidia.com/GPUGem ... _ch01.html
Aus zeitlichen Gründen hab ich aber so ziemlich die einfachste Variante umgesetzt. Dazu kommt noch ein bisschen spekulares Licht, was vielleicht auch noch ein wenig Feintuning benötigt hätte, aber es sieht besser aus, als ohne :)
Ein Kommilitone von mir hat bei der Spiellogik mitgeholfen und wollte dynamsiche CubeMaps für die Bälle einbauen, was aber leider nicht mehr funktioniert hat. Der andere hat sich um das Partikelsystem gekümmert, was aber leider auch nicht so ganz funktioniert hat, weswegen ich am Tag vor der Abgabe noch ein neues, grauenhaft langsames, gebastelt habe. Ich hatte hier ja noch extra einen Thread aufgemacht, hatte dann aber keine Zeit mehr, für die guten Techniken. Die Effekte sind deshalb auch ein wenig rudimentär, mit dem Rauch nach den Explosionen bin ich eigentlich sehr zufrieden, aber die Explosionen selber müssten wirklich noch etwas hübscher werden. Die ganzen kleinen Punkte platzen von den Blöcken ab, wenn diese getroffen werden, und haben jeweils die Farbe des Blocks, was ab und zu lustige bunte Wolken ergibt, wenn man mehrere Blöcke in kurzer Zeit trifft.
Umgesetzt wurde das ganze mit OpenGL und Qt. Ansonsten wird boost und glew benutzt.
Die Umgebung ist ein statisches Modell, welches aus einer Wavefront Obj Datei geladen wird. Zum Modellieren wurde Blender benutzt, die Spielobjekte sind alle von mir, die Wüste mit Palmen, Pflanzen und Steine ist eine Komposition aus Modellen von BlendSwap. Die Schatten sind das Ergebnis der tollen Bake-Funktion von Blender die gerade für so etwas wirklich gut zu gebrauchen ist.
Wer das ganze mal ausprobieren möchte, hier gibts die Windows Executables:
http://www.C3-Soft.de/WaterBreakout/WaterBreakout.zip
(man beachte: Qt war nicht so super für die Maussteuerung, weshalb mit Maus mit einem kleinen Hack eingefangen wird. Näheres steht in der Readme)
Ich persönlich hab vor, das ganze noch etwas weiter zu entwickeln. Die Spiellogik ist eigentlich schön flexibel geworden (es gibt z.B ein Level mit 2 Paddeln) und ich hab noch eine ganze Menge anderer Ideen, was man cooles einbauen könnte. Am Wasser könnte man auch nochmal arbeiten, wenn da jemand noch super Tips für mich hat, freue ich mich, davon zu hören. Wer sich für die Implementierung interessiert, die Shader werden aus Textdateien geladen, außerdem wird das ganze evtl. OpenSource. Ich würde es auch gerne von Qt auf glfw umstellen, für Vollbildmodus und bessere Maussteuerung. Achja und ich hab natürlich noch ein effizientes Partikelsystem zu implementieren!