PictureRubber Stefan Benischke, Eric Jahn, Erik Müller 26.01.2011 Spezielle Kapitel Grafische Datenverarbeitung Erfurt University of Applied Sciences Wintersemester 2010/2011 1 1 1
Gliederung Demonstration Aufgabenverteilung Spielprinzip / Einsatz Technische Herausforderungen Kinect Performance der Bildermanipulation Dynamische Integration von Bildern / Videos 2 2 2
1. Demonstration 3 3 3
2. Aufgabenverteilung Stefan Benischke Kinect-Integration CLNUI-Framework Dynamischen Content-Import Menü / Programmlogik Eric Jahn Shaderimplementation und –integration Gestenhandling Erik Müller Kinect-Integration OpenNI & NITE Gestenerkennung Texturing 4 4 4
3. Spielprinzip / Einsatz durch Interaktionen mit der Hand können Bilder/Bildbereiche wegradiert werden Einsatz: interaktive Touren durch Gebäude Entwicklung eines Objektes darstellen Bilderspiele 5 5 5
4.1. Technische Herausforderungen I Problem: versch. SDK-, API- und Treiberversionen für Kinect Code Laboratories: CL NUI Plattform gute Treiberunterstützung (Motor, Tiefenbild, Ton) schlechte Unterstützung durch das Framework OpenNI Plattform und SDK zur Ansteuerung verschiedener Sensoren C# Wrapper OpenNI.net NITE PrimeSense Dienstschicht für OpenNI C# Wrapper ManagedNite (kompiliert für XNA 3.1) 6 6 6
4.1. Technische Herausforderungen II 7 7 7
4.1. Technische Herausforderungen III Lösung: Trial & Error verschiedener Treiberversionen und SDKs Zusammenspiel aus: OpenNI (unstable) Modified Kinect Sensor Plugin 5.0.0.0. PrimeSense NITE Stable Zugriff auf Sensordaten sowie Funktionen des NITE-Frameworks (z.B. Hand- und Gestenerkennung) Glätten der Handbewegung durch Mittelwertberechnung Weitere Stabilisierung durch Anpassung der PointDenoiser- Distanzen 8 8 8
4.2. Technische Herausforderungen I Performance der Bildermanipulation: Anspruch möglichst Echtzeit Möglichkeiten: Get/Set-Pixel Byte-Operationen Shader 9 9 9
4.2. Technische Herausforderungen II Get/Set-Pixel Array-Operation zu langsam Byte-Operationen schneller als Get/Set-Pixel allerdings für jedes Bild ein Byte-Array viele for-Schleifen und Vergleiche Shader sehr schnell wenig Code Verfahren: Render To Texture 10 10 10
4.2. Technische Herausforderungen III Entscheidung für Umsetzung mittels Shader sehr performant und Echtzeit Shader 1: erfassen der Mouseposition bei jedem Update daraus wird Texturvorlage generiert Shader 2: löschen der Texturbereiche anhand der Vorlage 11 11 11
4.2. Technische Herausforderungen IV Probleme bei Shader-Umsetzung: Umrechnung der Mauskoordinaten auf Fensterkoordinaten Löschen der RenderTargets nach Änderungen am Fenster Anlegen einer Kopie mithilfe von GetData()und SetData() Zustandsänderungen im Shader nicht feststellbar jede Textur muss überprüft werden, ob der betroffene Bereich gelöscht werden kann 12 12 12
4.3. Technische Herausforderungen I Dynamische Integration der Bilddaten Normalerweise: Integration sämtlicher verwendeter Bilder über Content Importer bzw. ContentProject Ansatz: Bilder dynamisch zur Laufzeit aus Ordner einlesen Lösung: Texture2D.FromStream() 13 13 13
4.3. Technische Herausforderungen II Dynamische Integration der Videodaten Normalerweise: Integration sämtlicher verwendeter Videos über Content Importer bzw. ContentProject Ansatz: Ähnlich wie bei der Bildintegration Lösung: ausstehend statische Integration umgesetzt Probleme: aus Performancegründen nicht integriert 14 14 14
Ausblick Mehrbenutzerunterstützung Radieren auf Videos Kinect-Ansteuerung verbessern Motoransteuerung Mikrofonunterstützung
Fragen
Vielen Dank für Ihre Aufmerksamkeit