Jeux de réalité virtuelle et de ce qui rend votre corps un contrôleur ! (L’unité + Visual Studio + Kinect + Oculus) (7 / 11 étapes)

Étape 7: Kinect Scripting

Créez un nouveau dossier dans votre dossier Scripts appelé KinectScripts. Maintenant dans ce dossier, créez deux nouveaux scripts ; un appelé BodyManger et l’autre appelé BodyView.

IMAGE 1 CI-DESSUS

BodyManager

Tout d’abord, nous avons besoin de BodyManager - cette volonté d’objet Mange la connexion du capteur Kinect et lire toutes les données de corps provenant de la Kinect.

Importer la bibliothèque de Kinect avec :

Ensuite, nous avons besoin de certains champs pour le manager pour stocker et les données et obtenir des données du capteur.

Private KinectSensor _Sensor ;

Private BodyFrameReader _Reader ;

privé corps [] _Data = null ;

Organisme public [GetData()

{

retour _Data ;

}

Bon alors maintenant dans la méthode Start nous voulons établir la connexion pour la Kinect.

void Start()

{

_Sensor = KinectSensor.GetDefault() ;

Si (_Sensor! = null)

{

_Reader = _Sensor.BodyFrameSource.OpenReader() ;

Si (! _Sensor.IsOpen)

{

_Sensor.Open() ;

}

}

}

Maintenant que la connexion est ouverte et la lecture des données, nous avons besoin de le stocker dans le tableau de corps. Nous ferons ce chaque frame du jeu, c’est pourquoi nous devons modifier la méthode Update().

Tout d’abord, nous vérifions pour voir si le _Reader a été mis en place et la connexion est terminée. Si il a nous prendrons la dernière image, le lecteur a lu dans et si ce n’est pas null, nous pouvons ensuite vérifier pour voir si les données sont là.

Maintenant, nous avons besoin d’obtenir des données relatives au corps de la Senor. Pour ce faire, nous aurons besoin créer un nouveau tableau de corps avec les données de le Sensor.BodyFrameSource.BodyCount.

À la fin, la méthode devrait ressembler à ceci :

void Update()

{

Si (_Reader! = null)

{

trame de var = _Reader.AcquireLatestFrame() ;

Si (image! = null)

{

Si (_Data == null)

{

}

}

}

}

Ensuite, nous avons besoin actualiser le flux de données du lecteur. En ajoutant le code suivant pour manipuler le cadre.

void Update()

{

Si (_Reader! = null)

{

trame de var = _Reader.AcquireLatestFrame() ;

Si (image! = null)

{

Si (_Data == null)

{

_Data = new Body[_Sensor.BodyFrameSource.BodyCount] ;

}

cadre. GetAndRefreshBodyData(_Data) ;

cadre. Dispose() ;

Frame = null ;

}

}

}

La dernière méthode dans la classe de gestionnaire de corps est OnApplicationQuit(), qui supprime le lecteur et ferme le flux de capteur, il définit à null.

Sub OnApplicationQuit()

{

Si (_Reader! = null)

{

_Reader.Dispose() ;

_Reader = null ;

}

Si (_Sensor! = null)

{

Si (_Sensor.IsOpen)

{

_Sensor.Close() ;

}

_Sensor = null ;

}

}

Vue du corps

Le Script suivant pour écrire est de tirer la structure du squelette. Il ne faut nécessairement voir le squelette pour le jeu, cependant, je vais vous montrer comment montrer suivi corps squelettique. Nous devons également les données squelettiques pour suivre les mains, dont l’État va dicter des commandes du contrôleur.

Pour cette classe de MonoBehavoir nous aurons besoin, un matériau pour dessiner l’os dans la scène de l’unité. Un gameobject pour stocker le BodyManger, pour contrôler le flux de la Kinect.

Il faut également un objet de BodyManager et un dictionnaire pour stocker les corps étant l’objet d’un suivi.

Ensuite, nous devons tracer tous les os par les deux articulations qui elles seront connectées à.

BodyView Update()

Nous devons maintenant dans la méthode Update() de l’unité vérifier si le gestionnaire de corps n’est pas null et qu’il a données.

Ensuite, tout en restant dans la méthode Update(), nous devons obtenir une quantité d’organes dans la liste des organes de suivi. Supprimez ensuite les organes inconnus.

Liste trackedIds = gcnew List () ;

foreach (var corps dans les données)

{

Si (corps == null)

{

continuer ;

}

Si (le corps. IsTracked)

{

trackedIds.Add (corps. TrackingId) ;

}

}

KnownIds la liste = new List (_Bodies.Keys) ;

Tout d’abord supprimer les organes non chaînées

foreach (ulong trackingId dans knownIds)

{

Si (! trackedIds.Contains(trackingId))

{

Destroy(_Bodies[trackingId]) ;

_Bodies.Remove(trackingId) ;

}

}

Maintenant que nous avons les clés pour les organes de suivi, nous avons besoin créer un objet de corps avec ce tracking key ID. Nous avons besoin d’écrire plus de deux méthodes. Une méthode CreateBodyObject() qui va prendre un id d’ulong et une méthode RefreashBodyObject() qui va prendre un objet Kinect.Body et un GameObject pour le corps. Nous allons utiliser ces méthodes après avoir traverser les données et trouver si les organes à l’intérieur sont suivis ou non. Si c’est l’objet d’un suivi, mais n’a pas un TrackingId, alors nous avons besoin de créer un organe avec cette TrackingID. S’il est suivi et a un TrackingId puis nous avons juste besoin de rafraîchir le corps dessiné.

foreach (var corps dans les données)

{

Si (corps == null)

{

continuer ;

}

Si (le corps. IsTracked)

{

Si (! _Bodies.ContainsKey (corps. TrackingId))

{

_Bodies [l’organe. TrackingId] = CreateBodyObject (corps. TrackingId) ;

}

RefreshBodyObject (corps, _Bodies [l’organe. TrackingId]) ;

}

}

}

CreateBodyObject()

Le CreateBodyObject prend un ID et retourne un gameobject corps. Donc il faut d’abord créer un gameobject qui stockera les données appropriées récupérées ; puis nous avons besoin d’une boucle for pour passer par chaque joint à dessiner le corps.

Pour chaque commune dans le corps, nous créons un cube et ajoutez un lineRenderer à ce cube. Le cube sera tiré à chaque joint alors que le moteur de rendu de ligne est tirés au sort pour assembler les jointures.

RefreashBodyObject()

Maintenant à écrire la méthode ResfreshBodyObject. Dans cette méthode, nous avons besoin de passer par chaque type commun possible tout comme nous l’avons fait dans la méthode CreateBodyObject. Mais cette fois nous passons dans le corpus actuel, ainsi que le cas échéant numéro de suivi donc nous n’attirons les os pour la mauvaise personne.

privé RefreshBodyObject Sub (Kinect.Body corps, bodyObject GameObject)

{

pour (jt Kinect.JointType = Kinect.JointType.SpineBase ; jt < = Kinect.JointType.ThumbRight ; jt ++)

{

}

}

À l’intérieur de cette boucle, nous avons besoin obtenir les paires clé-valeur, que nous avons fait avant dans la boucle de l’OS pour chaque articulation.

privé RefreshBodyObject Sub (Kinect.Body corps, bodyObject GameObject)

{

pour (jt Kinect.JointType = Kinect.JointType.SpineBase ; jt < = Kinect.JointType.ThumbRight ; jt ++)

{

Kinect.Joint sourceJoint = corps. Articulations [jt] ;

Kinect.Joint ? targetJoint = null ;

if(_BoneMap.ContainsKey(JT))

{

targetJoint = corps. Articulations [_BoneMap [jt]] ;

}

}

}

Il faut aussi mettre à jour la position de squelettes n’est à l’endroit précis sur l’écran. Pour ce faire, nous avons besoin d’écrire une méthode pour obtenir le Vetcor3 de la sourceJoint.

L’échelle de 10 est à agrandir le squelette, ce qui rendra plus facile à manipuler. Maintenant, nous devons pouvoir corriger la position de gameObjects.

L’étape suivante la boucle est d’obtenir le linerenderer de la bodyObject, qui était le cube, nous créons pour chaque articulation. Nous devons voir si la cible commune a une valeur. Si ce n’est nous pouvons ensuite tracer une ligne de l’articulation d’origine vers la cible.

LineRenderer lr = jointObj.GetComponent () ;

if(targetJoint.HasValue)

{

LR. SetPosition (0, jointObj.localPosition) ;

LR. SetPosition (1, GetVector3FromJoint(targetJoint.Value)) ;

}

d’autre

{

LR.Enabled = false ;

}

Formidable ! Donc nous sommes presque finis avec le dessin du squelette. Il y a un peu plus d’informations qui vous seront utile que le SDK vous donne, qui effectue le suivi de statut. Il y a trois États au choix, sur chenilles, présumée ou NotTracked. Nous pouvons avoir le moteur de rendu de ligne nous montrer l’état de suivi en changeant sa couleur. Pour ce faire nous avons besoin d’une méthode qui retourne une couleur selon l’état actuel.

Maintenant nous ajoutons une ligne supplémentaire à la boucle de la RefreachBodyObject méthode et nous avons finis.

Et c’est tout pour le dessin du squelette !

Articles Liés

Comment faire un écouteur de suivi 3D de réalité virtuelle pour moins de 10$

Comment faire un écouteur de suivi 3D de réalité virtuelle pour moins de 10$

De ces 5 dernières années, les dispositifs de réalité virtuelle plus en plus populaires comme Oculus Rift, carton de Google, Microsoft HoloLens, dominent actuellement le secteur de l'électronique consommateur à tel point qu'ils saisir bien souvent un
Difficulté de n’importe quel contrôleur de jeux vidéo

Difficulté de n’importe quel contrôleur de jeux vidéo

Les jeux vidéo sont génial. L'achat d'un contrôleur de 40-50 $ chaque fois que ce n'est pas quelque chose de petites pauses. Ce Instructable va vous montrer Comment résoudre différents problèmes avec votre télécommande !Utilisez l' organigramme dans
Casque de réalité virtuelle sécurité

Casque de réalité virtuelle sécurité

Porter un casque de réalité virtuelle peut être extrêmement dangereux, surtout si vous êtes à pied (ou en cours d'exécution) à travers des mondes virtuels. Courir dans les murs ou autres objets peut être évité si ce casque de sécurité est usé.En fonc
Initial des réglages de configuration pour casque de réalité virtuelle (VR)

Initial des réglages de configuration pour casque de réalité virtuelle (VR)

J'ai récemment acheté un des nombreux casques de carton de Google « améliorés » peu coûteux. Sur eBay, ces dispositifs ont le prix indiqués dans la même gamme que le véritable carton de Google mais offrent une qualité de construction plus robuste et
Sculpturales machines pour accéder à la réalité virtuelle

Sculpturales machines pour accéder à la réalité virtuelle

Dans ce Instructable que je partagerai une progression des étapes qui ont conduit à la création d'un sculptures fonctionnelles semi pour la visualisation de réalité virtuelle, dont la forme est conçue pour prendre différents rôles selon sa taille exé
Flux de bureau de PC à téléphone pour la réalité virtuelle (maintenant avec tête suivi!)

Flux de bureau de PC à téléphone pour la réalité virtuelle (maintenant avec tête suivi!)

J'ai aimé la réalité virtuelle pendant une longue période. Bien que vous n'aurez pas besoin de l'un, j'ai finalement eu mes mains sur une imprimante 3D et a été en mesure d'imprimer un casque VR.Malheureusement, cela ne vient pas avec toute l'électro
Environnements interactifs de prototypage en réalité virtuelle avec Google carton, l’unité et Hotline Bling (TfCD)

Environnements interactifs de prototypage en réalité virtuelle avec Google carton, l’unité et Hotline Bling (TfCD)

Ces jours-ci, (captivants) sont prioritaires sur la fonctionnalité pure et specs sur papier. Ce changement d'orientation a influé sur le processus de conception des designers industriels, architectes, développeurs d'applications et artistes, s'efforç
Visualiseur de smartphone de réalité virtuelle !

Visualiseur de smartphone de réalité virtuelle !

C'est la « Nuit de construire » à TechShop Chandler, et projet de ce soir est un visualiseur de réalité virtuelle DodoCase...Je dois admettre que lorsque j'ai signé pour cet événement, je n'avais pas la moindre idée quoi je m'embarquais parce que je
Expérience de réalité virtuelle multi-sensorielle

Expérience de réalité virtuelle multi-sensorielle

À l'aide d'invention de 1957 de Morton Heilig, « Sensorama, » comme une source d'inspiration, j'ai développé une plateforme de réalité virtuelle DIY.L'occasion pour 360 degrés d'exploration, il peut sembler étrange au design autour d'une position fix
Devenir Tony Stark : Réalité virtuelle Mobile installation avec mouvement de saut

Devenir Tony Stark : Réalité virtuelle Mobile installation avec mouvement de saut

Combien d'entre vous ont voulu utiliser vos mains et regardez autour naturellement sans avoir à utiliser votre souris, le clavier et l'écran ? Eh bien, aujourd'hui je vais vous montrer comment utiliser un téléphone, Bond en mouvement, et des lunettes
DIY vous réalité virtuelle casque - carton de Google

DIY vous réalité virtuelle casque - carton de Google

À partir du Google i/o admises le carton de Google , j'ai toujours envie pour en obtenir un, à cause de cela est une réalité virtuelle de prix bas appareil sensation. Malheureusement, faute d'acheter un carton de google me rendait fou. J'ai donc déci
Afficher tout contenu Web comme réalité virtuelle

Afficher tout contenu Web comme réalité virtuelle

Il y a eu récemment beaucoup d'excitation autour de la réalité virtuelle et c'est tout car grandes entreprises comme Oculus Rift et périphériques d'entrée comme la tige de Leap Motion, PrioVR, Sixense, ont été la conception de nouveaux et d'expérienc
Réalité virtuelle bricolage Skateboard expérience avec Arduino et Google carton

Réalité virtuelle bricolage Skateboard expérience avec Arduino et Google carton

Il s'agit d'un projet vraiment amusant et facile qui peut être fait en environ une heure. Sur la partie inférieure de la planche à roulettes est un accéléromètre/gyroscope avec une carte Arduino qui transmet le mouvement angulaire du Conseil via blue
Dispositif de réalité virtuelle téléconférence avec un carton de Google

Dispositif de réalité virtuelle téléconférence avec un carton de Google

Dispositif de réalité virtuelle téléconférence avec un carton de GoogleCréé par John Choi | 2015Ce projet est un dispositif de vidéoconférence avec deux webcams de vision stéréoscopique, placé sur une plateforme motorisée 3 axes, contrôlée par un écr