Juegos de realidad virtual y haciendo a su cuerpo un controlador! (Unidad Visual Studio + Kinect + Oculus) (7 / 11 paso)

Paso 7: Kinect Scripting

Crear una nueva carpeta dentro de la carpeta de secuencias de comandos llamado KinectScripts. Ahora en esa carpeta crear dos nuevas secuencias de comandos; uno llamado BodyManger y otro había llamado BodyView.

IMAGEN 1

BodyManager

En primer lugar necesitamos BodyManager - esta voluntad objeto Mange la conexión del sensor Kinect y leer todos los datos de cuerpo del Kinect.

Importar la biblioteca de Kinect con:

Entonces necesitamos algunos campos para el encargado de almacenar y los datos y obtener los datos del sensor.

_Sensor de KinectSensor privada;

privado BodyFrameReader _Reader;

privado cuerpo blanco de [] = null;

[] público cuerpo GetData()

{

volver blanco;

}

Bien ahora en el método de inicio que queremos establecer la conexión para el Kinect.

void Start()

{

_Sensor = KinectSensor.GetDefault();

Si (_Sensor! = null)

{

_Reader = _Sensor.BodyFrameSource.OpenReader();

Si (! _Sensor.IsOpen)

{

_Sensor.Open();

}

}

}

Ahora que la conexión está abierta y leer en los datos que necesitamos almacenar en el arreglo del cuerpo. Haremos esta cada fotograma del juego, por lo tanto tenemos que modificar el método Update().

Primero comprobamos si se ha establecido la _Reader y la conexión se ha completado. Si tiene tomaremos el último fotograma, el lector leer en y si no es null, entonces podemos comprobar para ver si los datos están allí.

Ahora tenemos que obtener los datos del cuerpo del Señor. Para hacer esto necesitamos crear una nueva matriz de cuerpo con los datos de la Sensor.BodyFrameSource.BodyCount.

Al final el método debería parecerse a esto:

void Update()

{

Si (_Reader! = null)

{

var marco = _Reader.AcquireLatestFrame();

Si (marco! = null)

{

Si (blanco == null)

{

}

}

}

}

Entonces tenemos que actualizar el flujo de datos desde el lector. Añadiendo el siguiente código para manipular la estructura.

void Update()

{

Si (_Reader! = null)

{

var marco = _Reader.AcquireLatestFrame();

Si (marco! = null)

{

Si (blanco == null)

{

Blanco = Body[_Sensor.BodyFrameSource.BodyCount nuevo];

}

marco. GetAndRefreshBodyData(_Data);

marco. Dispose();

marco = null;

}

}

}

El último método en la clase de Body Manager es OnApplicationQuit(), que dispone el lector y cierra la corriente de Sensor, lo establece en null.

void OnApplicationQuit()

{

Si (_Reader! = null)

{

_Reader.Dispose();

_Reader = null;

}

Si (_Sensor! = null)

{

Si (_Sensor.IsOpen)

{

_Sensor.Close();

}

_Sensor = null;

}

}

Vista del cuerpo

La siguiente secuencia de comandos para escribir es dibujar la estructura esquelética. No necesariamente necesitamos ver el esqueleto del juego, sin embargo, te voy a mostrar cómo mostrar seguimiento esquelético cuerpo. También necesitamos los datos esqueléticos a las manos, cuyo estado dictará órdenes del controlador.

Para esta clase de MonoBehavoir vamos a necesitar, un material para dibujar el hueso en la escena de la unidad. Un gameobject para almacenar el BodyManger, para controlar el flujo del Kinect.

También necesitamos un objeto BodyManager y un diccionario para almacenar los cuerpos siendo rastreados.

A continuación necesitamos todos los huesos de las dos articulaciones que se conectará a un mapa.

BodyView Update()

Ahora en el método Update() de la unidad tenemos que comprobar para ver si el administrador de cuerpo no es null y que tiene datos.

Luego, mientras todavía en el método Update(), que necesitamos obtener la cantidad de cuerpos en la lista de organismos de seguimiento. Luego eliminar cuerpos desconocidos.

Lista de trackedIds = nuevo () de la lista;

foreach (var cuerpo en datos)

{

Si (cuerpo == null)

{

continuar;

}

Si (el cuerpo. IsTracked)

{

trackedIds.Add (cuerpo. TrackingId);

}

}

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

En primer lugar eliminar cuerpos sin seguimiento

foreach (ulong trackingId en knownIds)

{

Si (! trackedIds.Contains(trackingId))

{

Destroy(_Bodies[trackingId]);

_Bodies.Remove(trackingId);

}

}

Ahora que ya tenemos las claves para el seguimiento de los órganos que necesitamos crear un objeto de cuerpo con ese seguimiento clave de ID. Tenemos que escribir dos métodos más. Un método CreateBodyObject() que tendrá un id de ulong y un método RefreashBodyObject() que tendrá un objeto Kinect.Body y un GameObject para el cuerpo. Vamos a utilizar estos métodos después de pasar por los datos y encontrar si se rastrean los cuerpos dentro o no. Si se realiza un seguimiento pero no tiene un TrackingId, necesitamos crear un órgano con TrackingID. Si se rastrean y tiene un TrackingId entonces basta refrescar el cuerpo dibujado.

foreach (var cuerpo en datos)

{

Si (cuerpo == null)

{

continuar;

}

Si (el cuerpo. IsTracked)

{

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

{

_Bodies [cuerpo. TrackingId] = CreateBodyObject (cuerpo. TrackingId);

}

RefreshBodyObject (cuerpo, _Bodies [cuerpo. TrackingId]);

}

}

}

CreateBodyObject()

La CreateBodyObject toma un ID y devuelve un cuerpo gameobject. Así que primero tenemos que crear un gameobject que almacenará los datos adecuados obtenidos; entonces necesitamos un bucle ir a través de cada articulación para dibujar el cuerpo.

Para cada articulación del cuerpo creamos un cubo y añadir un lineRenderer a ese cubo. El cubo se sorteará en cada empalme mientras se sorteará el procesador de línea para conectar las articulaciones.

RefreashBodyObject()

Ahora a escribir el método ResfreshBodyObject. En este método tenemos que ir a través de cada tipo común posible al igual que en el método CreateBodyObject. Pero este tiempo estamos pasando en el cuerpo actual, así como el correspondiente número de seguimiento para no dibujar los huesos de la persona equivocada.

privado void RefreshBodyObject (Kinect.Body cuerpo, bodyObject GameObject)

{

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

{

}

}

Dentro de este bucle es necesario obtener los pares de valores clave que hemos hecho antes en el circuito de hueso para cada articulación.

privado void RefreshBodyObject (Kinect.Body cuerpo, bodyObject GameObject)

{

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

{

Kinect.Joint sourceJoint = cuerpo. Juntas [jt];

¿Kinect.Joint? targetJoint = null;

if(_BoneMap.ContainsKey(JT))

{

targetJoint = cuerpo. Juntas [_BoneMap [jt]];

}

}

}

También tenemos que actualizar la posición de los esqueletos, por lo que es en el lugar exacto en la pantalla. Para ello es necesario escribir un método para obtener la Vetcor3 de la sourceJoint.

La escala de 10 es agrandar el esqueleto, que hará más fácil trabajar con. Ahora tenemos posición para corregir la posición de gameObjects.

Siguiente paso el bucle es obtener el linerenderer de la bodyObject, que era el cubo que creamos para cada articulación. Entonces tenemos que ver si el objetivo común tiene un valor. Si lo hace entonces podemos dibujar una línea de la articulación original en el destino.

LineRenderer lr = jointObj.GetComponent ();

if(targetJoint.HasValue)

{

LR. SetPosition (0, jointObj.localPosition);

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

}

otra cosa

{

LR.Enabled = false;

}

¡ Excelente! Así que ya casi terminamos con el dibujo del esqueleto. Hay un poco más información que será útil que el SDK te da, que es el seguimiento de estado. Hay tres Estados para elegir, orugas, inferidos o NotTracked. Podemos tener el procesador de línea nos muestran el estado de seguimiento cambiando su color. Para ello necesitamos un método que devuelve un color basado en el estado actual.

Ahora añadimos una línea más a la de lazo de la RefreachBodyObject método ya terminados.

Y eso es para dibujar el esqueleto!

Artículos Relacionados

DIY realidad Virtual auricular - Google cartón

DIY realidad Virtual auricular - Google cartón

De la entrada-salida de Google aparece el cartón de Google , siempre quiero conseguir uno, debido a es una realidad virtual sensación de precio bajo dispositivo. Por desgracia, no pudiendo comprar un cartón de google me llevó loco. Así que he decidid
Realidad Virtual DIY Skate experiencia con Arduino y la cartulina de Google

Realidad Virtual DIY Skate experiencia con Arduino y la cartulina de Google

Este es un proyecto muy divertido y fácil que se puede hacer aproximadamente una hora. En la parte inferior de la patineta es un acelerómetro/giroscopio con una placa Arduino que transmite el movimiento angular de la Junta a través de bluetooth a un
Convertido en Tony Stark: Configuración de realidad Virtual móvil con movimiento de salto

Convertido en Tony Stark: Configuración de realidad Virtual móvil con movimiento de salto

¿Cuántos de ustedes han querido usar sus manos y mire a su alrededor naturalmente sin tener que utilizar el ratón, el teclado y la pantalla? Bueno, hoy voy a mostrar cómo utilizar un teléfono, leap motion, y gafas de Realidad Virtual para crear su pr
Realidad virtual para Dummies - TfCD (tecnología para el diseño de concepto)

Realidad virtual para Dummies - TfCD (tecnología para el diseño de concepto)

Las nuevas tecnologías hacen posible experimentar un mundo virtual en 3D. Esto se puede hacer con un Oculus Rift pero también con su propio smartphone, usando una cartulina de Google. Normalmente necesita mucho conocimientos y algunas habilidades de
Máquinas escultóricas para acceder a la realidad Virtual

Máquinas escultóricas para acceder a la realidad Virtual

En este Instructable que comparto una progresión de pasos que llevaron a la creación de un semi esculturas funcionales para la visualización de la realidad virtual, cuya forma está diseñada para asumir diferentes roles dependiendo de su tamaño ejecut
Entornos interactivos de prototipos en realidad virtual con Google cartón, unidad y línea de Bling (TfCD)

Entornos interactivos de prototipos en realidad virtual con Google cartón, unidad y línea de Bling (TfCD)

Estos días, experiencias (inmersión) son prioridad sobre la funcionalidad pura y especificaciones sobre el papel. Este cambio de enfoque ha influido en el proceso de diseño de diseñadores industriales, arquitectos, desarrolladores de aplicaciones y a
Casco de realidad virtual

Casco de realidad virtual

Usar un casco de realidad Virtual puede ser extremadamente peligroso, especialmente tan si usted está caminando (o corriendo) a través de mundos virtuales. Funcionamiento en paredes u otros objetos puede prevenirse si se lleva este casco de seguridad
Escritorio de PC a teléfono de la corriente para realidad Virtual (ahora con cabeza seguimiento!)

Escritorio de PC a teléfono de la corriente para realidad Virtual (ahora con cabeza seguimiento!)

Realidad virtual que he amado durante mucho tiempo. Aunque usted no necesita uno, I finalmente llegó a mis manos en una impresora 3D y pudo imprimir un casco VRPor desgracia, esto no viene con ninguna electrónica. He estado usando mi iPod Touch como
Cómo hacer un casco de seguimiento 3D de realidad Virtual por menos de 10$

Cómo hacer un casco de seguimiento 3D de realidad Virtual por menos de 10$

De los últimos 5 años, los dispositivos de realidad Virtual cada vez más populares como Oculus Rift, cartón de Google, Microsoft HoloLens, han dominado en la actualidad el sector de electrónica de consumo hasta el punto que agarra mucho con frecuenci
FISTO™ - el puño montado realidad Virtual teclado y Mouse

FISTO™ - el puño montado realidad Virtual teclado y Mouse

Utilizando un teclado y un ratón para navegar por en la realidad virtual es engorroso en el mejor. A tientas oculto y golpear el ratón o el teclado en bebidas MounatinDew o abrimos bolsas de Doritos son un problema constante. Yo prefiero usar un game
Dispositivo de teleconferencia de realidad virtual con Google cartón

Dispositivo de teleconferencia de realidad virtual con Google cartón

Realidad virtual dispositivo de teleconferencia con cartulina de GoogleCreado por John Choi | 2015Este proyecto es un dispositivo de teleconferencia por vídeo con dos cámaras Web para visión estereoscópica colocado encima de una plataforma motorizada
Ver cualquier contenido Web como realidad Virtual

Ver cualquier contenido Web como realidad Virtual

Hay ha sido recientemente un montón de entusiasmo alrededor de la realidad Virtual y eso es todo porque grandes empresas como Oculus Rift y dispositivos de entrada como el movimiento de salto, PrioVR, MotionPack tallo, han sido el diseño nuevo y expe
Inicial de ajustes de configuración para el casco de realidad Virtual (VR)

Inicial de ajustes de configuración para el casco de realidad Virtual (VR)

Recientemente he comprado uno de los muchos auriculares baratos de Google cartón "mejorados". En eBay estos dispositivos tienen un precio en la misma gama que el cartón de Google real pero ofrecen una calidad de construcción más robusta y mejor
Tamaño teléfonos inteligentes 3D Viewer y casco de realidad Virtual como Oculus Rift y cartulina de Google, para Ipod Touch y similares.

Tamaño teléfonos inteligentes 3D Viewer y casco de realidad Virtual como Oculus Rift y cartulina de Google, para Ipod Touch y similares.

Hagamos un Visor 3D y casco de realidad Virtual para juegos o para ver 3D lado a lado fotos y videos en 3D SBS con un IPOD TOUCH o SMARTPHONE (con pantalla tamaño hasta 4 o 4.5 pulgadas).Esto puede también usarse como una headmounted Mostrar con algu