Project Magic Ball

Magic Ball

MultiMediaTechnology, 2010

Magic Ball ist eine Augmented Reality Anwendung mit großem Spielcharakter.

Das Ziel dieser interaktiven Installation/Anwendung ist es, den Spieler zu motivieren, statt der Maus einen Stift und ein Blatt Papier in die Hand zu nehmen. Der Spieler muss in jedem Level mindestens die Hälfte der verfügbaren Gegenstände einsammeln und einen Ball von A nach B befördern, indem er einen Strich auf einem Blatt Papier zeichnet. Durch die implementierte Physik rollt/springt der Ball entlang dieser Linie, da er von einer simulierten Erdanziehung angezogen wird. Dieses Blatt wird durch eine Webcam erfasst und von unserem Programm als Strecke für den Ball interpretiert. Das Spiel läuft Rundenbasierend ab, d.h. der Spieler bekommt Informationen wie: Position von Start und Ziel und die einzusammelnde Objekte. Anhand dieser Informationen muss er seinen Pfad zeichnen. Wenn fertig gezeichnet ist, dann wird durch die Leertaste der Ball ins Rollen gebracht. Für einen neuen Versuch muss der Spieler die n-Taste drücken und eine neue Runde beginnt. Links der Startposition erhält der Spieler die zusätzliche Information mit welcher Anfangsbeschleunigung der Ball weggeschossen wird, wenn er die Leertaste drückt. Als weitere Interaktion, während der Ball sich bewegt, bekommt der Spieler noch die Möglichkeit mittels der Leertaste eine begrenze Anzahl von Sprüngen durchzuführen. Neben dem Standard Modus, bei dem es gilt die vorgegebenen Levels zu meistern, hat der Spieler noch den „How much can you get?“-Modus bei dem es darum geht, wie viele Levels er insgesamt schafft und wieviel Zeit er dafür benötigt, zur Verfügung. In diesem Modus werden die Objekte per Zufall auf dem Spielfeld positioniert. Mit steigender Anzahl der Level muss der Spieler mehr Gegenstände einsammeln um die Level zu meistern. Wenn seine Versuche verstrichen sind, dann nimmt das Spiel sein Ende und die abgeschlossenen Levels und die gemessene Zeit werden in einer Highscore-Liste festgehalten.

Die Anwendung wurde mittels der Programmiersprache C++ und dem quelloffenen open frameworks umgesetzt. Als Entwicklungsumgebung entschieden wir uns für Visual Studio 2008 SP1. Für die realistische Physik Engine diente Box2D, das als open frameworks addOn verfügbar ist. Das Spiel läuft auf Windows PCs mit der X86 Architektur. Für die Linienerkennung dienten uns eine VGA Web-Kamera, die auf einem Stativ montiert war und eine PS3 Kamera, die eine erheblich bessere Erkennung lieferte. Für die Linienkennung implementierten wir ein Differenzbild- und Kontrasterkennungsverfahren, dass wir im Fach Augmented Reality gelehrt bekommen haben. Dank dieser Technologie und unserem Algorithmus ist es möglich die Linie sinnvoll zu erkennen und in das Spiel zu integrieren.

Technische Hürden:

Eine große Herausforderung war durch die richtige Linienerkennung gegeben. Die Linie wird mittels Konturerkennungsverfahren von Openframeworks erkannt und in eine box2D-Linie transformiert. Hierbei entsteht eine geschlossene Linie, die durch eine obere und untere Kante in eine geschlossene Fläche gewandelt wird. Diese mussten wir aufbrechen und zu einer sinnvolen Linie berechnen.

Um dieses Problem zu lösen haben wir folgende Schritte verwendet:

1) Erkennen der „contour.pts“ (Konturpunkte)

2) Sortieren nach Auftreten entlang der X-Achse

3) Errechnen des Abstands: (Aktueller Punkt – nächster Punkt)/2

4) Um zu garantieren, dass die Interpolation mit dem richtigen, nächsten Punkt verläuft, überprüfen wir, ob der nächste Punkt einen Mindestabstand hat (der sich nach der Stiftdicke ausrichtet und variabel während dem Spiel einstellbar ist).

Appendices

Creators