Example #1
0
        private void cerrarCajon(Vector3 pos)
        {
            //Proyectar posicion del gesto a 2D
            Vector2    pos2D         = TgcKinectUtils.projectPoint(pos);
            float      minDist       = float.MaxValue;
            CajonFocus cajonMasCerca = null;

            //Buscar el cajon que esté mas cerca
            foreach (CajonFocus c in cajones)
            {
                //Que este abierto
                if (c.CurrentState == CajonFocus.State.Opened)
                {
                    //Ver distancia en 2D
                    float dist = Vector2.Length(pos2D - c.getScreenCenter());
                    if (dist < minDist)
                    {
                        minDist       = dist;
                        cajonMasCerca = c;
                    }
                }
            }

            //Ver si encontramos uno suficientemente cerca
            if (cajonMasCerca != null && minDist < CAJON_MIN_DIST_GESTO)
            {
                cajonMasCerca.close();
            }
        }
Example #2
0
        public override void init()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            //Loader de kinect
            tgcKinect = new TgcKinect();
            tgcKinect.init();
            tgcKinect.DebugSkeleton.init();


            //Loader de focus
            FocusParser.TEXTURE_FOLDER = GuiController.Instance.ExamplesMediaDir + "Focus\\texturas\\";
            FocusParser.MESH_FOLDER    = GuiController.Instance.ExamplesMediaDir + "Focus\\texturas\\";
            FocusParser loader    = new FocusParser();
            string      fileScene = GuiController.Instance.ExamplesMediaDir + "Focus\\escena1.dat";

            loader.FromFile(fileScene);
            _meshes    = loader.Escene;
            _conjuntos = loader._focusSets;

            // Bounding box de la escena
            // Calculo el bounding box de la escena
            float x0 = 10000;
            float y0 = 10000;
            float z0 = 10000;
            float x1 = -10000;
            float y1 = -10000;
            float z1 = -10000;

            foreach (TgcMesh m in _meshes)
            {
                TgcBoundingBox box = m.BoundingBox;
                if (box.PMin.X < x0)
                {
                    x0 = box.PMin.X;
                }
                if (box.PMin.Y < y0)
                {
                    y0 = box.PMin.Y;
                }
                if (box.PMin.Z < z0)
                {
                    z0 = box.PMin.Z;
                }

                if (box.PMax.X > x1)
                {
                    x1 = box.PMax.X;
                }
                if (box.PMax.Y > y1)
                {
                    y1 = box.PMax.Y;
                }
                if (box.PMax.Z > z1)
                {
                    z1 = box.PMax.Z;
                }
            }

            bounds = new TgcBoundingBox(new Vector3(x0, y0, z0), new Vector3(x1, y1, z1));
            Vector3 c = bounds.calculateBoxCenter();

            c.Y    = 0;
            center = TgcBox.fromSize(c, new Vector3(100, 100, 100), Color.Blue);


            //Escalas y centro de la escena para kinect
            tgcKinect.PositionScale   = 1000;
            tgcKinect.sceneCenter     = c;
            tgcKinect.skeletonOffsetY = 0.75f;


            //Analizador de gestos
            gestureAnalizer = new GestureAnalizer();
            gestureAnalizer.setSceneBounds(bounds);



            //Camara
            GuiController.Instance.FpsCamera.Enable         = true;
            GuiController.Instance.FpsCamera.MovementSpeed *= 10;
            GuiController.Instance.FpsCamera.JumpSpeed     *= 10;
            GuiController.Instance.FpsCamera.setCamera(new Vector3(2000f, 1600f, -4000f), new Vector3(2000f, 500f, 0));
            //GuiController.Instance.FpsCamera.setCamera(c, c + new Vector3(0, 0, 1));



            //Separar cajones del resto del FocusSet
            cajones = new List <CajonFocus>();
            foreach (FocusSet conjunto in _conjuntos)
            {
                if (conjunto.Tipo == FocusSet.TRASLACION)
                {
                    CajonFocus cajon = new CajonFocus();
                    cajon.Conjunto = conjunto;
                    cajon.init();
                    cajones.Add(cajon);
                }
            }
        }