Esempio n. 1
0
        public override void render(float elapsedTime)
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            showAcumTime += elapsedTime;

            TgcKinectSkeletonData data = tgcKinect.update();

            if (data.Active)
            {
                tgcKinect.DebugSkeleton.render(data.Current.KinectSkeleton);

                //Buscar gesto en mano derecha
                TgcKinectSkeletonData.AnalysisData rAnalysisData = data.HandsAnalysisData[TgcKinectSkeletonData.RIGHT_HAND];


                if (showAcumTime > 0.3f)
                {
                    showAcumTime = 0;
                    estadisticas = "Diff AvgZ: " + printFloat(rAnalysisData.Z.DiffAvg) + ", AvgZ: " + printFloat(rAnalysisData.Z.Avg) + ", varX: " + printFloat(rAnalysisData.X.Variance) + " varY: " + printFloat(rAnalysisData.Y.Variance);
                    posicion     = "Pos rHand: " + TgcParserUtils.printVector3(data.Current.RightHandSphere.Center);
                }
                GuiController.Instance.Text3d.drawText(estadisticas, 50, 150, Color.Yellow);
                GuiController.Instance.Text3d.drawText(posicion, 50, 200, Color.Yellow);


                if (gestoDetectado)
                {
                    acumTime += elapsedTime;
                    if (acumTime > 1)
                    {
                        gestoDetectado = false;
                        text.Color     = Color.Red;
                        text.Text      = "Nada";
                    }
                }
                else
                {
                    /*
                     * if ((rAnalysisData.Z.Max - rAnalysisData.Z.Min) > 10f)
                     * {
                     *  gestoDetectado = true;
                     *  acumTime = 0;
                     *  text.Color = Color.Green;
                     *  text.Text = "Abriendo cajon";
                     * }
                     */


                    float diff = (float)GuiController.Instance.Modifiers["diff"];

                    //Gesto de abrir cajon
                    if (rAnalysisData.Z.DiffAvg < diff && FastMath.Abs(rAnalysisData.X.Variance) < 5f && FastMath.Abs(rAnalysisData.Y.Variance) < 10f)
                    {
                        gestoDetectado = true;
                        acumTime       = 0;
                        text.Color     = Color.Green;
                        text.Text      = "Abriendo cajon";
                    }
                }
            }



            text.render();
        }
Esempio n. 2
0
        /// <summary>
        /// Analizar gestos para una mano particular
        /// </summary>
        private bool doAnalize(TgcKinectSkeletonData.AnalysisData data, out Gesture gesture)
        {
            //Abrir cajon en Z
            if (data.Z.DiffAvg > 4f && data.X.Variance < 60f && data.Y.Variance < 60f)
            {
                gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, data.Z.Max), GestureType.OpenZ);
                return(true);
            }

            //Cerrar cajon en Z
            if (data.Z.DiffAvg < -4f && data.X.Variance < 60f && data.Y.Variance < 60f)
            {
                gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, data.Z.Min), GestureType.CloseZ);
                return(true);
            }


            /*
             * //Abrir cajon en Z
             * if (data.Z.DiffAvg < -0.037f && data.X.Variance < 0.5f && data.Y.Variance < 1f)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.OpenZ);
             *  return true;
             * }
             *
             * //Cerrar cajon en Z
             * if (data.Z.DiffAvg > 0.037f && data.X.Variance < 0.5f && data.Y.Variance < 1f)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.CloseZ);
             *  return true;
             * }
             *
             * //Open left
             * if (data.X.DiffAvg > 0.037f && data.Y.Variance < 0.05f && data.Z.Variance < 1f)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.OpenLeft);
             *  return true;
             * }
             *
             * //Open right
             * if (data.X.DiffAvg < -0.037f && data.Y.Variance < 0.5f && data.Z.Variance < 1f)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.OpenRight);
             *  return true;
             * }
             *
             * //Press button
             * if (data.X.Variance < 0.1f && data.Y.Variance < 0.1f && data.Z.Variance < 0.1f && data.Z.Avg <= sceneBounds.PMin.Z)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.PressButton);
             *  return true;
             * }
             *
             * //Go Left
             * if (data.X.Variance < 0.1f && data.Y.Variance < 0.1f && data.Z.Variance < 0.1f &&
             *  FastMath.Abs(data.Y.Avg - sceneCenter.Y) <= 1f && data.X.Avg <= sceneBounds.PMin.X)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.GoLeft);
             *  return true;
             * }
             *
             * //Go Right
             * if (data.X.Variance < 0.1f && data.Y.Variance < 0.1f && data.Z.Variance < 0.1f &&
             *  FastMath.Abs(data.Y.Avg - sceneCenter.Y) <= 1f && data.X.Avg <= sceneBounds.PMin.X)
             * {
             *  gesture = new Gesture(new Vector3(data.X.Avg, data.Y.Avg, 0), GestureType.GoRight);
             *  return true;
             * }
             */

            gesture = new Gesture();
            return(false);
        }