Schnittpunkt eines Strahls mit einem Terrain

Zur Berechnung des Schnittpunkts eines Strahls mit einem Terrain ist es wichtig die Menge der zu prüfenden Dreiecke zu minimieren, da ein Terrain in der Regel aus sehr vielen Flächen besteht. Ein sehr guter und schneller Weg dies zu erreichen besteht darin, den Weg des Strahls mitzuverfolgen und alle auf dem Weg für einen Schnittpunkt infrage kommenden Dreiecke zu testen.

Continue reading

Feuer-Demo des Partikel-Systems

Feuer mit dem neuen Partikelsystem

Feuer mit dem neuen Partikelsystem

Ich habe eine Webstart-Demo online gestellt die den aktuellen Stand des Partikel-Systems in der Parrot Engine zeigt. Das Bild zeigt ein aus Partikeln bestehendes Feuer.

In der Engine gibt es bereits einen umfangreichen Partikel-Editor der das erstellte System per XML exportieren kann. Diese XML-Datei wird direkt von der Engine verarbeitet und das hierdurch definierte System kann anschließend direkt in den Szene-Graphen eingefügt werden. Das Zeichnen und simulieren des Systems steuert dann alles die Engine ganz automatisch.

Beim nächsten Release wird sowohl der Partikel-Editor schon mit dabei sein als auch diese Feuer-Demo und der Alienshooter. Ich hoffe auch, dass ich dazu kommen werde mit dem nächsten Release einiges an Dokumentation mitzuliefern: Eine Referenzdoku sowie ein “Getting-Started” sind wohl erstmal am dringensten.

Preview-Release des Alien-Shooters!

Das erste Preview-Release meines Alien-Shooters ist raus!

Intro Screenshot

Intro Screenshot

Ihr könnt den Alien Shooter über Java WebStart starten (aktuell defekt, da JOGL Webstart Libraries nicht funktionieren)

Spielinhalt

Das Ziel des Spiels ist es so viele Punkte wie möglich durch das Abschiessen von Aliens zu sammeln. Die Aliens steigen hinter einer Bergkette auf und überqueren das Spielgebiet bevor sie wieder verschwinden. Der Spieler hat während dieser Passage die Möglichkeit die Ufos abzuschiessen.

Zum Schiessen hat der Spieler eine Kanone mit zwei Rohren die jeweils abwechselnd eine Rakete abfeuern können. Raketen fliegen nicht unendlich schnell, so dass man etwas vorhalten sollte um die Ufos auch zu treffen.

Es gibt Extrapunkte wenn mehr als 70% der Schüsse ihr Ziel erreicht haben und wenn alle Ufos eines Levels erledigt wurden.

Das Spiel endet, wenn in einem Level nicht mindestens die geforderte Abschussquote erreicht wurde.

In der aktuellen Preview-Version gibt es derzeit nur eine Sorte Ufos und 5 Level. Die später folgende, fertige Version wird viele verschiedene Feinde, deutlich mehr Level und ggfls. auch Powerups und Sondermissionen beinhalten.

Bedienung

Die zum Spielen notwendigen Tasten werden stets eingeblendet. Außerdem benötigt ihr die Maus um die Kanone zu steuern und zu schiessen.

Während des Spiels kann mit “ESC” pausiert werden.

Fehler gefunden?

Falls irgendetwas nicht funktionieren sollte, dann sendet mir bitte die Datei “alienshooter.log” aus eurem Homeverzeichnis mit einer Beschreibung was ihr gemacht habt, was nicht funktierte und wie sich das geäußert hat.

Die Log-Datei findet ihr unter einem deutschen Windows XP unter C:/Dokumente und Einstellungen/BENUTZERNAME. Unter Vista findet ihr den Ordner unter C:/Users/BENUTZERNAME. Bei Vista ist es egal ob ihr eine deutsche oder englische Version benutzt.

Ich freue mich natürlich auch über Anregungen, Anfragen, Kritik, Tipps und alles andere an Feedback!

Viele Grüße und viel Spaß – Stefan

Das Alien Shooter-Spiel nähert sich der Fertigstellung

Die letzten Tage waren vor allem mit der Arbeit an dem 3D-Font erfüllt. Hierzu habe ich die Convert-Funktion von Blender genutzt (Alt-C) um aus einem Font-Objekt ein Mesh zu erzeugen. Nachdem die Faceanzahl über den Decimate-Modifier verringert wurde und der Font per extrudieren in die Tiefe gezogen wurde, habe ich die Vorderseite manuell noch etwas interessanter gestaltet. Das manuelle Löschen der Vorderseite jedes Characters und durch eine manuell erzeugte, mit einer Kante versehenen auszutauschen war eine wahre Fleissarbeit…

Der 3D Font wird in Blender erstellt

Der 3D Font wird in Blender erstellt

Dieser Font kommt nun überall im Spiel zum Einsatz. Der neu erstellte Intro-Screen enthält diesen Font zweimal – jeweils mit einem anderen RenderState. Der Titel des Spiels ist mit einer Textur überzogen deren u/v Koordinaten über einen Fragment-Shader bewegt werden. Der Text unten “Press SPACE to start” entält lediglich einen sehr einfachen Lighting-Shader der einfache Beleuchtungseffekte erzeugt damit der Font räumlicher wirkt.

Screenshot vom Intro Bildschirm

Screenshot vom Intro Bildschirm

  • Die Raketen die der Spieler abfeuern kann haben nun, nach der Optimierung des Partikelsystems auch eine Rauchwolke die sie hinterlassen.
  • Titelmusik ist implementiert (von http://audio.ibeat.org/)
  • Die Ufos haben nun auch einen Explosions-Sound wenn sie getroffen werden
  • Es gibt einen Radar der anzeigt wo gerade Ufos sind – der Spieler muss dann nicht so viel suchen
  • Ein Level des Spiels besteht aus mehreren Angriffswellen – definiert über XML-Dateien. So können einfach neue Levels hinzugefügt werden.

Und es geht weiter….

Partikelsystem implementiert

Die erste Version meines Partikelsystems ist fertig:

Explodierendes Raumschiff mit Partikel-Explosion

Explodierendes Raumschiff mit Partikel-Explosion

Die Frameanzahl bricht durch die Explosion leider ziemlich stark ein: Von etwa 800 auf 200. Dieser Effekt kumuliert sich natürlich wenn mehrere Explosionen zeitgleich sichtbar sind. Das Partikelsystem muss jetzt erst mal grundoptimiert werden bevor es wirklich fertig ist:

  • Das Partikelsystem nur zeichnen wenn mindestens ein Partikel im Frustum sichtbar ist (während der Partikel-Updates die maximale quadratische Entfernung der Partikel vom Zentrum berechnen und daraus die BoundingSphere ermitteln)
  • Nach passenden OpenGL-Extensions suchen die es möglich machen die Partikel einfacher zu rendern – und nicht jedes einzelne als Quad… falls die Erweiterung existiert und sehr schnell ist, ist der Punkt 1 vermutlich nicht mehr nötig.
  • Die Filterung und die Leuchteffekte der Partikel über einen eigenen Shader realisieren und nicht über mehrere RenderStates zwischen denen gewechselt werden muss.

Damit die Explosion noch besser aussieht, brauche ich dringend interessantere Texturen für meine Partikel. Derzeit verwende ich einfache Punkte die nach außen einen weichen Verlauf zu vollständiger Transparenz haben. Ich werde mal sehen wie andere Formen sich als Explosions-Partikel machen.