Seite 1 von 1

[Projekt] No Mercy For Flying Saucers

Verfasst: 08.04.2013, 23:13
von Raphael
Neben einem Projekt mit Andre (Windows 8 Game - wird demnächst auch präsentiert), bei dem ich jedoch ausschließlich den Posten des Artist übernehme, arbeite ich seit 2 Wochen an einem kleinen TowerDefense. Es ist mein zweites C++ Projekt und mein erstes mit OpenGL. Da ich im letzten Semester in einer Grundlagenveranstaltung zu Computergraphik viel mit OpenGL 1.3 und GLUT gearbeite habe wollte ich es auch mal richtig ausnutzen bevor es an Shader usw. geht. Außerdem hat man schnell etwas auf dem Bildschirm, was eine große Motivation darstellt. Ich arbeite mit Visual Express 2012 for Desktop, Blender, Gimp und später noch mit Eclipse, um es für Linux/MacOS zu kompilieren. Abgesehen von GLUT benutze ich keinen "fremden" Code. Assimp hatte ich mal ganz kurz im Einsatz, als ich mit den UVs im eigenen Exporter kämpfte. Jedoch konnte ich das Problem lösen und hab es daher wieder rausgenommen.

Wie bei TowerDefense gewohnt kommen von links die Gegner (in dem Fall Ufos) und wollen durch das Feld durch, hin zum rechten Rand. Es wird Unterschieden zwischen einer Bau-Phase und einer Wave-Phase(Gegnerwelle), in der nicht gebaut werden kann. Die Steuerung wird komplett via Maus/Touch stattfinden. Ich teste es immer wieder auf meinem x86 Tablett. Drei Turm-Typen sind in Planung: Angriff, Gift und Gefrier. Außerdem kann jeder Turmtyp zweimal aufgelevelt werden. Von den Ufos gibt es drei Typen, welche sich in Geschwindigkeit und Schadensaufnahme unterscheiden. Zerstören eines UFOs gibt Credits, welche wiederum mit der aktuellen Anzahl an verbleibenden Leben verrechnet und dem Score gutgeschrieben werden.

Die großen Hürden habe ich schon überwunden, unter anderem:
- Eigener, recht simpler, Texture-Loader. Ich habe mich aus Faulheit für ppm/pgm in ASCII entschieden. Alles in eine Texture-Klasse gekapselt, so muss ich nur noch "useTexture("xxx")" aufrufen. Texture-IDs werden mit dem Pfad/Names-String gemapped und so nur einmal geladen
- Blender Mesh-Export-Script und Mesh-Loader. Damit bekomme ich Tris und UV-Coords in mein Projekt. Ansonsten läuft es wie bei den Texturen, ein einfaches "useMesh("xxx")" reicht zum Laden der Display-List mit den Informationen
- Pfadfindung via Breitensuche. Ehrlich gesagt habe ich mich nicht mit Allgorithmen speziell für Spiele beschäftigt sondern eine normale Breitensuche implementiert.
- Informationen über jede Wave in einer Textdatei. Auch eher simpel: Es gibt pro Wave eine .wave, in welcher "Wartezeit \n, GegnerTyp \n, Gesundheit \n" festgehalten sind.
- Türme suchen sich ein Ziel in Reichweite und halten daran fest es mit einem Strahl zu beschießen.
- GUI. Noch nicht auf dem Screenshot zu sehen. Im Moment gibt es einen simplen Button und einen mit "Drück-"Animation.
- ContextMenü für Turmbau/Wavestart. Ebenfalls noch nicht auf dem Screenshot.

Im Moment bin ich die Prototypen mit texturierten Meshes am Ersetzen. Außerdem möchte ich noch einen Zahlenrenderer für Score und Credits schreiben, ein Hauptmenü ist auch noch geplant. Der Hauptteil der Arbeit ist aber geschafft, nur fangen in einer Woche die Vorlesungen wieder an und es könnte sich daher doch noch ziehen.

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 09.04.2013, 23:52
von Raphael
Heute endlich die Turmmodelle und deren Texturen fertig bekommen. Der TriCount ist etwas zu hoch, werde da wahrscheinlich später nochmal ein wenig nachbessern und manuell löschen, was man an Geometrie nicht sieht. Als nächstes folgen schönere Ufos und Umgebung.

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 13.04.2013, 23:35
von Raphael
Die Tage habe ich recht viele Modelle/Texturen ausgetauscht und eine kleine Lighting-Class geschrieben, welche die Beleuchtung in der Build-(Tag) und Wave-Phase(Nacht) steuert. Ganz zufrieden bin ich noch nicht, das Gesamtbild muss noch homogener werden. Als nächstes werde ich die Aliens überarbeiten und einen Zahlenrenderer schreiben, damit Score und Credits angezeigt werden.

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 13.04.2013, 23:37
von Krishty
Gefällt mir; vor allem der Look mit viel indirekter Beleuchtung. Wenn ich ganz doll büddebüdde sage, gibt es dann eine Chance auf Antialiasing?

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 13.04.2013, 23:40
von Raphael
Da hatte ich ein wenig gegoogelt. Anscheinend ginge es mit Freeglut, die Multisampling Flag bringt bei mir nämlich nichts. Aber im Grafikkartentreiber lässt sich Multisampling manuell aktivieren, dass funktioniert jedenfalls.

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 13.04.2013, 23:47
von Artificial Mind
Bei der Grafikkomplexität könnte man auch einfach in ein doppelt so großes Target rendern und dann am Ende runterskalieren ;)

EDIT: Falls das zu teuer ist, kannst du dir auch einfach ein FXAA aus dem Internet klauen oder es im Treiber aktivieren

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 13.04.2013, 23:54
von Raphael
Falls sowas mit dem alten OpenGL/GLUT geht gerne. Ansonsten werde ich mal schauen, ob die Umstellung auf Freeglut ginge. Handelt sich dabei nur um eine Weiterentwicklung, oder?

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 14.04.2013, 00:17
von Artificial Mind
Sorry ich arbeite nur mit OpenGL 3+, mit altem OGL kenne ich mich nur ganz wenig aus.

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 14.04.2013, 00:21
von Raphael
Hab Freeglut schon included und erfolgreich kompiliert ;) Damit sollte eigentlich Multisampling funktionieren.

Nachtrag: Freeglut erkennt die Flag und setzt das Multisampling um ;)

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 14.04.2013, 00:40
von Krishty
Astrein; danke :)

Re: [Projekt] No Mercy For Flying Saucers

Verfasst: 20.04.2013, 21:45
von Raphael
Kleine Fortschritte. Hab dieses Semester einfach zu viel gewählt :x Was gibt es neues:
- Texturen weiter abgestimmt
- Tür
- Ein Gegnermodell (Sphere)
- Custom Mouse Cursor

Da ich langsam die Grenzen meiner Tablet-GPU erreiche und sogar auch auf meinem PC (AMD Radeon 7950) ein wenig die miese Perfo bemerke, werde ich beim Contentsytem demnächst ein wenig Hand anlegen und "Entities" programmieren, welche Mesh+Textur+Farben kapselen und ich so in einem Rutsch z.B die Felder zeichnen kann, ohne zu viele State-Changes zu haben. Wobei mir gerade auffällt, dass ich oft recht spezielle Sachen pro Objekt mache (zufällige Texturposition bei Kugeln auf Türmen usw). Das wäre eine richtige Rumhackerei, weil es dann wieder viele Subklassen gäbe :( Passiert, wenn man gar nichts so aufwendiges machen wollte und der Kern nicht drauf ausgelegt ist^^ Naja, hab atm eh keine Zeit für sowas.