Пример #1
0
    void Update()
    {
        Point2D userPos = gazeUtils.GetLastValidUserPosition();

        if (null != userPos)
        {
            //mapping cam panning to 3:2 aspect ratio
            double tx = (userPos.X * 5) - 2.5f;
            double ty = (userPos.Y * 3) - 1.5f;

            //position camera X-Y plane and adjust distance
            eyesDistance = gazeUtils.GetLastValidUserDistance();
            depthMod     = 2 * eyesDistance;

            Vector3 newPos = new Vector3(
                (float)tx,
                (float)ty,
                (float)(baseDist + depthMod));
            cam.transform.position = newPos;

            //camera 'look at' origo
            cam.transform.LookAt(Vector3.zero);

            //tilt cam according to eye angle
            double angle = gazeUtils.GetLastValidEyesAngle();
            cam.transform.eulerAngles = new Vector3(cam.transform.eulerAngles.x, cam.transform.eulerAngles.y, cam.transform.eulerAngles.z + (float)angle);
        }

        Point2D gazeCoords = gazeUtils.GetLastValidSmoothedGazeCoordinates();

        if (null != gazeCoords)
        {
            //map gaze indicator
            Point2D gp = UnityGazeUtils.getGazeCoordsToUnityWindowCoords(gazeCoords);

            Vector3 screenPoint = new Vector3((float)gp.X, (float)gp.Y, cam.nearClipPlane + .1f);

            Vector3 planeCoord = cam.ScreenToWorldPoint(screenPoint);
            gazeIndicator.transform.position = planeCoord;

            //handle collision detection
            checkGazeCollision(screenPoint);
        }

        //handle keypress
        if (Input.GetKey(KeyCode.Escape))
        {
            Application.Quit();
        }
        else if (Input.GetKey(KeyCode.Space))
        {
            Application.LoadLevel(0);
        }
    }
Пример #2
0
    void Update()
    {
        if (!GazeManager.Instance.IsCalibrating)
        {
            Point2D userPos = gazeUtils.GetLastValidUserPosition();

            if (null != userPos)
            {
                //Make eyes visible
                if (!leftEye.renderer.enabled)
                {
                    leftEye.renderer.enabled = true;
                }
                if (!rightEye.renderer.enabled)
                {
                    rightEye.renderer.enabled = true;
                }

                //Set eyes size based on distance
                eyesDistance = gazeUtils.GetLastValidUserDistance();
                depthMod     = eyesDistance * .5f;
                Vector3 scaleVec = new Vector3((float)(depthMod), (float)(depthMod), (float)eyeBaseScale.z);

                Eye left  = gazeUtils.GetLastValidLeftEye();
                Eye right = gazeUtils.GetLastValidRightEye();

                double angle = gazeUtils.GetLastValidEyesAngle();

                if (null != left)
                {
                    //position GO based on screen coordinates
                    Point2D gp = UnityGazeUtils.getRelativeToScreenSpace(left.PupilCenterCoordinates);
                    PositionGOFromScreenCoords(leftEye, gp);
                    leftEye.transform.localScale  = scaleVec;
                    leftEye.transform.eulerAngles = new Vector3(leftEye.transform.eulerAngles.x, leftEye.transform.eulerAngles.y, (float)angle);
                }

                if (null != right)
                {
                    //position GO based on screen coordinates
                    Point2D gp = UnityGazeUtils.getRelativeToScreenSpace(right.PupilCenterCoordinates);
                    PositionGOFromScreenCoords(rightEye, gp);
                    rightEye.transform.localScale  = scaleVec;
                    rightEye.transform.eulerAngles = new Vector3(rightEye.transform.eulerAngles.x, rightEye.transform.eulerAngles.y, (float)angle);
                }
            }
        }
        else
        {
            //Make eyes invisible eyes
            if (leftEye.renderer.enabled)
            {
                leftEye.renderer.enabled = false;
            }
            if (rightEye.renderer.enabled)
            {
                rightEye.renderer.enabled = false;
            }
        }

        lock (_callbackQueue)
        {
            //we handle queued callback in the update loop
            while (_callbackQueue.Count > 0)
            {
                _callbackQueue.Dequeue()();
            }
        }

        //handle keypress
        if (Input.GetKey(KeyCode.Escape))
        {
            Application.Quit();
        }
    }