Die Konfiguration von vielen Leap Motion Projekten ist gleich oder ähnlich.
In diesem Blogpost wird aufgezeigt, wie mithilfe des Build-Patterns die einzelnen Parameter gespeichert und die Konfiguration elegant zusammengebaut wird.
Als Grundlage wird mein Leap Motion Framework genommen, dass bereits eine "zentrale" Klasse zur Konfiguration eines Leap Motion Projekts besitzt, aber aktuell nicht sonderlich flexibel ist.
Aufbauend auf den Blogpost Leap Motion - JavaFX 3D Hand (1) wird die 3D Visualisierung der Hand erweitert.
Dazu verbinden wir die einzelnen Spheres mit Cylinder, sodass wir ein noch realistischeres Skelett darstellen können.
Dieser Blogpost beinhaltet Grundlagen zu JavaFX 3D, der Leap Motion API v2 und die praktische Umsetzung einer 3D Hand.
Im ersten Teil dieser Reihe werden relevante Punkte einer Hand im Sichtfeld des Leap Motion Controllers aus der API ermittelt und visualisiert.
Das Leap Motion Java SDK ist nicht im Maven Central Repository registriert.
Dadurch kann Maven die einzelnen Abhängigkeiten nicht automatisch herunterladen.
Aus diesem Grund ist es notwendig die Bibliotheken manuell bereitzustellen.
Hierfür gibt es mehrere Möglichkeiten.
Dieser Artikel ergänzt den Blogpost Leap Motion Java SDK - Installation, bei dem bereits eine programmtechnische Lösung aufgezeigt wurde, um native Bibliotheken zur Laufzeit einzubinden.
Mit JavaFX ist es möglich ein eigenes Fenster individuell und dynamisch zu gestalten.
Diese Serie wird sich damit beschäftigen alle Funktionalitäten eines Fensters nachzubauen.
Dabei wird Layout und Logik so getrennten, dass am Ende für die Gestaltung der Oberfläche des Fensters nur noch die CSS und FXML-Datei bearbeitet werden muss.
Als Standardeingabegerät wird die Maus festgelegt.
Die Logik wird aber allgemein gehalten, sodass die Steuerung auch mit anderen Eingabegeräten (z.B. Leap Motion) möglich ist.
Ein gekippter Leap Motion Controller eröffnet uns neue Anwendungsszenarien.
Eines davon ist die JavaFX-Applikation JSideways.
JSideways zeigt, wie der Leap Motion Controller als Grafiktablett-Ersatz genutzt werden kann.
Die Parrot AR.Drone ist ein Quadrocopter, welcher Steuerbefehle über WLAN entgegennimmt.
Da ich noch keine Zeit gefunden habe mich näher mit den Details auseinanderzusetzen, nutze ich zur Steuerung der Drohne die Open Source Anbindung von ParrotsOnJava.com.
Die JavaLand-Konferenz fand zum ersten Mal in diesem Jahr im Phantasialand (Brühl) statt.
Bei den Community-Aktivitäten konnte ich im Rahmen des Java Innovation Lab die Leap Motion präsentieren.
Für alle die nicht dabei sein konnten, habe ich nachträglich eine Demonstration meiner JavaFX-Applikation auf Youtube zur Verfügung gestellt.
Zusätzlich kann jeder auf GitHub einen detailierten Einblick in den Quelltext werfen.
Wie verhält sich die Leap Motion hinter Glas?
Diese Frage wird öfters in der Leap Motion Community gestellt, um den Controller vor Berührung und Umwelteinflüssen zu schützen.
Die offizielle Empfehlung lautet die Leap Motion nicht hinter Glas zu verbergen.
Dies liegt unter anderem daran, dass die Reflexion und Verzerrung der Glasplatte die Berechnung verfälscht.
Soviel zur Theorie.
Doch welche Werte erwarten uns tatsächlich?
Bevor der dritte Teil der Hand-Tracking Reihe vorgestellt wird, gibt es ein kleines Beispiel, wie Gesten mit den Daten der Leap Motion interpretiert werden können.
In dem Spiel JBlockMotion muss ein rechteckiger Block über eine Ebene gekippt und ins Ziel gestellt werden.
Die Richtung bestimmt der Spieler, indem er Kreise in die Luft zeichnet. Der übersichtlichkeitshalber wird in dem Spiel auf 3D, Schatten, Animationen, Menüs, etc. verzichtet und lediglich ein Level implementiert.
Im vorherigen Artikel Leap Motion Java - Hand Tracking (1) wurde die Hand in der vertikalen Ebene getrackt.
In diesem Teil wird die dritte Dimension hinzugefügt und die TrackingBox eingeführt.
Jede Hand kann eine eigene TrackingBox besitzen und anhand dieser wird die Bildschirmposition berechnet.
Das hat den Vorteil, dass bei mehrhändigen Applikationen sich die Hände nicht kreuzen müssen, um von der einen Seite des Bildschirms auf die andere zu gelangen.
Die in diesem Teil erarbeiteten Klassen stehen unter dem Link HandTracking zum Download zur Verfügung.
Im ersten Teil dieser Reihe wird eine abstraktes Hand-Tracking-Handling vorgestellt. D.h. unabhängig von der Visualisierung (AWT, Swing, LWJGL, etc.) soll die Leap Motion alle Hände registrieren und ihre Position auf den Bildschirm berechnen. Die in diesem Teil erarbeiteten Klassen stehen unter dem Link HandTracking zum Download zur Verfügung.
Neben C, C++, Objective-C, Python, etc. stellt die Leap Motion auch für Java eine Schnittstelle bereit. In diesem Artikel wird ein Ansatz gezeigt, wie das Leap Motion Java SDK installiert wird. Ziel ist möglichst plattformunabhängig zu bleiben und gleichzeitig die Hardware zu abstrahieren. Dafür wird eine programmtechnische Lösung in Java gewählt.