2015-11-17 2 views
2

Nous sommes très novices dans l'utilisation de Microsoft Kinect et nous essayons de l'associer à notre jeu Unity 2D pour un projet de classe. Une partie de notre projet de classe exige que nous projetions le jeu sur un tissu, et que l'utilisateur appuie sur le tissu afin d'interagir avec le jeu. Le joueur tapera sur le tissu afin de recueillir les objets qui tombent. Nous essayons d'utiliser la carte de profondeur avec le Kinect afin de voir où un utilisateur a tapé sur l'écran, puis nous pouvons voir avec quel objet ils interagissent.Mappage des relevés de profondeur Kinect à Unity

Nous éprouvons des difficultés à trouver un moyen de transformer les coordonnées de profondeur Kinect en coordonnées qui fonctionnent avec notre jeu. Nous sommes incapables d'utiliser le suivi du squelette en raison de notre configuration. Quelqu'un a-t-il une quelconque expérience de la transformation des données de coordonnées de profondeur Kinect en un jeu 2D Unity sans utiliser de fonctions squelettiques? Vous trouverez ci-dessous un schéma de notre configuration pour la clarification.

enter image description here

+0

Avez-vous regardé les données de profondeur? https://msdn.microsoft.com/en-us/library/jj131029.aspx?f=255&MSPPError=-2147217396 Le 'DepthImageFrame' semble contenir un membre' .Depth' pour chaque pixel qu'il reçoit. Vous devez prendre une image où l'utilisateur ne touche pas le tissu comme "profondeur zéro" et ensuite vous pouvez calculer la différence pour chaque pixel (ou un ensemble de pixels X par Y) pour détecter les "touches". –

+0

Salut Ron, merci pour la réponse. Nous avons essayé cela mais il lit toujours des "touches fantômes" dans des endroits aléatoires. Notre objectif principal est également d'essayer de convertir les coordonnées Kinect qui nous sont données par la fonction de profondeur pour afficher les coordonnées que nous pouvons ensuite utiliser dans Unity. Toute aide serait appréciée! –

+0

Est-ce que vous faites la moyenne des valeurs sur un certain nombre de cadres? –

Répondre

0

votre problème semble provenir de la profondeur de kinect de fait et les flux couleur ne sont pas alignés. Cela signifie que pour chaque pixle de profondeur, il y a un certain décalage à prendre en compte. Par conséquent, vous devez:

avant d'acquérir le premier cadre de profondeur, obtenez le mappeur de coordonnées.

KinectSensor Sensor = KinectSensor.GetDefault(); 
CoordinateMapper mapper = Sensor.CoordinateMapper; 

après que ces types sont prêts. acquérir votre premier cadre de profondeur. l'utiliser avec le cartographe pour remplir un tableau de ColorSpacePoint comme ceci:

ColorSpacePoint[] _colorPoints; 
mapper.MapDepthFrameToColorSpace(DepthData, _colorPoints); 

ce tableau nouvellement peuplé contiendra vos données de profondeur mis en correspondance avec l'espace couleur de la caméra kinect. vous allez commencer à obtenir des données précises et fiables sur le positionnement de la profondeur à l'intérieur de la couleur et en utilisant l'image fournie calibrer réellement votre application. À partir de là, je suppose que vous pouvez utiliser le ColorSpacePoint pour déterminer où l'image est appliquée et la déboguer visuellement en utilisant le flux de couleur régulier.