Shadows Kinect

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Spielbeschreibung

Während unseres Interaktionspraktikums haben wir ein kleines Spiel entwickelt. Die Silhouette des Benutzers wird an eine Leinwand projeziert. Nacheinander werden Kreise an einer zufälligen Position generiert. Wenn die Silhouette (der Schatten) des Spielers, einen Kreis berührt wird ein Punkt erlangt. Ziel des Spiels ist es innerhalb von 60 Sekunden eine möglichst hohe Punktzahl zu erreichen.

Shadowkinect whileplaying.png

Hardware

Durch die XBOX 360 Kinect 1.0 konnten wir durch die Tiefenbildaufnahmen den Körper genauer detektieren.

Beamer und Leinwand wurden zur Visualisierung des Spiels benötigt.

Das Spiel ist auf jedem Computer laufbereit.

Software

Das Projekt realisierten wir mit Hilfe von Open Frameworks. Durch diverse Addons haben wir eine Reihe neuer Funktionen zur Ergänzung der C++ Standard Bibliotheken erhalten. Wir benutzten:

OfxOpenCV, OfxBox2d, OfxCV, OfxKinect

Als Grundlage unseres Programmes haben wir das Beispiel kinectExample benutzt. Wir haben die Tiefenbildaufnahmen der Kinect durch zwei Treshholds (near und far) binarisieren können. Somit konnten wir den Spieler mit Hilfe des ContourFinders detektieren.

Der Benutzer interagiert mit unserem Spiel über sog. Regions of Interest. In unserem Projekt zählen wir durch die Funktion countNonZeroInRegion die „1er Bits“ in einem bestimmten rechteckigen Bereich. Wenn die Anzahl der „1er Bits“ einen gewissen Wert übersteigt, wird eine Funktion aufgerufen und der User erlangt einen Punkt.

Über die „unsichtbare“ Region of Interest wird ein Kreis gezeichnet. Da die Kinect ein Video mit einer Auflösung von 640x480 liefert und unsere Ausgabe Medium eine HD Auflösung von 1920x1024 hat, mussten wir außerdem eine Umrechnung vornehmen.

Nach jedem neu erlangten Punkt, erzeugt das Programm eine neue Region of Interest an einer zufälligen Position. Außerdem wird eine zufällige Farbe erzeugt, die die Spielfigur und den Kreis einfärbt.

Zusätzlich haben wir kleine gelbe Kreise implementiert, die bei jedem Punkt von oben herab fallen. Die Anzahl der gelben Kreise wird durch den aktuellen Punktestand bestimmt. Durch das Addon OfxBox2d verhalten sich die Kreise physikalisch richtig. Die gelben Kreise prallen von der Spielfigur ab.

Den 60 Sekunden Timer implementierten wir mithilfe der C++ Standardfunktionen.

Zuletzt fügten wir dem Projekt einen Startbutton hinzu. Der Timer wird erst dann gestartet, wenn der Benutzter den Startbutton für eine kurze Zeit dauerhaft berührt. Desto länger der Button berührt wird, umso kleiner wird dieser. Wenn der Button schließlich gänzlich verschwindet beginnt das Spiel.

Shadowkinect startbutton.PNG

Quellcode

ShadowKinect