Collision Trees

Die einzelnen Stufen der Kollisionserkennung

Visualierung des Sphere-trees anhand eines Beispiels: Bei diesem Modell wurden 6 Ebenen erstellt.

 

In Rahmen der Entwicklung der Spherical-Engine habe ich eine Lösung für objektunabhängige Kollisionserkennung entwickelt. Die Anforderung war, beliebige 3D Objekte zu laden und beim Ladevorgang mit Kollisionserkennung auszustatten.

Neben verschiedenen Ansätzen, entschieden David Kronenberger und ich uns dazu, die Objekte durch Kugeln zu approximieren, da dann die Auflösung der Kollisionen recht einfach ist. Um Rechenaufwand zu sparen und die Objekte möglichst genau zu approximieren, verwenden wir einen Sphere-Tree und testen erst auf der gröbsten Ebene, ob die Objekte überhaupt kollidieren können. Dann wird mit der nächsten Ebene fortgefahren bis entschieden werden kann, dass die Objekte kollidieren. Beim Laden der Objekte kann dabei angegeben werden, wie viele Ebenen für die Kollision erstellt werden sollen. In der Demo dazu, wurden die Kugeln visualisiert um die Korrektheit der Kollisionsüberprüfung zu testen. Der Sphere-tree wird bisher nur auf basis von Octrees erstellt. Dies ist zwar keine optimale Lösung, aber sie ist einfach und vor allem schnell.

Projekt zum erstellen 3-dimensionaler Szenen

Unterteilung eines geladenen Objektes.

Unterteilung eines geladenen Objektes.

In zusammenarbeit mit Holger Caesar habe ich während der Semesterferien an einem kleinen Projekt gearbeitet, bei dem es darum ging, 3D Objekte in einer Szene zu positionieren und zu verwalten. Ziel war es, mittels geeigneter Techniken nur Polygone zu zeichnen, die auch im Sichtfeld des Betrachters liegen. Gleichzeitig sollten Objekte bewegt werden können und Kollisionen mit anderen Objekten erkennen. Realisiert wurde die Unterteilung durch verschieden Octrees. So wurden die ganzen Szenen, als auch einzelne Objekte als Octrees abgelegt. Durch Frustum Culling konnten dadurch auch Szenen mit mehreren millionen Polygonen mit guten FPS erstellt werden.

Creep Smash

IngameScreenTowerSelection

In der Veranstaltung „Software Engineering I“ im Sommersemester 2012 habe ich in einem Team von 8 Leuten einen Client für ein Multiplayer Towerdefense spiel entwickelt (in anlehnung an Creep Smash) . Programmiert wurde das ganze in Java und OpenGL durch die LWJGL API. Für die graphische Benutzeroberfläche wurde NiftyGUI verwendet. Neben der Entwicklung des Clients sollte auch ein Map Editor und eine KI entwickelt werden.

In dem Projekt ging es auch darum, die Projektleiterfähigkeiten der Teilnehmer auszubauen. Dazu wurde nach dem Scrum-Modell immer für zwei Wochen ein Scrum-Master und ein Product-Owner ausgewählt, die das Produkt vor einem Kunden präsentieren und die Entwicklung im Team leiten sollten.

RSA-Verschlüsselung

In der Veranstaltung „Diskrete Strukturen II“ an der Uni Kassel im Wintersemester 11/12 wurde das Verschlüsselungsverfahren RSA vorgestellt. Die daraus erhaltenen Informationen wurden von mir genutzt, um ein kleines Tool zu entwickeln, mit dem RSA verschlüsselt und entschlüsselt werden kann. Gleichzeitig unterstützt es noch die Funktion zur generierung von großen Primzahlen, also zur generierung von Schlüsseln für RSA.

Des weiteren kann das Programm auch RSA-Nachrichten knacken, wenn die Schlüssel ungünstig gewählt wurden. Dies ist der Fall, wenn die 2 Schlüssel zum Beispiel sehr nah bei einander liegen oder einer der Schlüssel sehr klein ist.

Bei der Umsetzung wurde Java verwendet. Da alle gängigen Zahlenrepräsentation innerhalb von Java zu klein sind, wurden BigInteger verwendet. Damit können beliebig große Zahlen repräsentiert werden. Allerdings bringt Java von Haus aus nicht alle mathematischen Grundfunktionen für BigInteger mit, sodass unter anderem die Wurzelfunktion selbst realisiert werden musste.

Programmier-AG

Screenshots der Spiele aus der Java-AG

Screenshots der Spiele aus der Java-AG

Die Java-AG war eine von mir ins Leben gerufene AG am Wiprech-Gymnasium in Groitzsch, in der ich mit einigen Mitschülern Spiele programmiert habe. Hier haben wir innerhalb der letzten zwei Jahren, neben unserem Abitur einige spiele programmiert.

Die Spiele wurden in Java programmiert. Als Grafikschnittstelle wurde das von Java2D bereitgestellte Canvas verwendet.

Die Java-AG sollte dazu dienen, neben dem Informatikunterricht eine Programmiersprache zu vertiefen. Gleichzeitig wollten auch alle Teilnehmer lernen, wie man Spiele entwickelt.