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(); }
/// <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); }