Esempio n. 1
0
    public Vector3 GetEyeTrackingPos()
    {
        if (!Pvr_UnitySDKEyeManager.Instance.EyeTracking)
        {
            return(Vector3.zero);
        }

        bool result = Pvr_UnitySDKAPI.System.UPvr_getEyeTrackingData(ref eyePoseData);

        if (!result)
        {
            PLOG.E("UPvr_getEyeTrackingData failed " + result);
            return(Vector3.zero);
        }

        EyeDeviceInfo info        = GetDeviceInfo();
        Vector3       frustumSize = Vector3.zero;

        frustumSize.x = 0.5f * (info.targetFrustumLeft.right - info.targetFrustumLeft.left);
        frustumSize.y = 0.5f * (info.targetFrustumLeft.top - info.targetFrustumLeft.bottom);
        frustumSize.z = info.targetFrustumLeft.near;

        var   combinedDirection = eyePoseData.foveatedGazeDirection;
        float denominator       = Vector3.Dot(combinedDirection, Vector3.forward);

        if (denominator > float.Epsilon)
        {
            eyePoint    = combinedDirection * (frustumSize.z / denominator);
            eyePoint.x /= frustumSize.x; // [-1..1]
            eyePoint.y /= frustumSize.y; // [-1..1]
        }
        return(eyePoint);
    }
    public Vector3 GetEyeTrackingPos()
    {
        if (!Pvr_UnitySDKEyeManager.Instance.trackEyes)
        {
            return(Vector3.zero);
        }

        EyeDeviceInfo info = GetDeviceInfo();

        Vector3 frustumSize = Vector3.zero;

        frustumSize.x = 0.5f * (info.targetFrustumLeft.right - info.targetFrustumLeft.left);
        frustumSize.y = 0.5f * (info.targetFrustumLeft.top - info.targetFrustumLeft.bottom);
        frustumSize.z = info.targetFrustumLeft.near;

        bool result = Pvr_UnitySDKAPI.System.UPvr_getEyeTrackingData(ref eyePoseData);

        if (!result)
        {
            Debug.LogError("UPvr_getEyeTrackingData failed " + result);
            return(Vector3.zero);
        }

        //Debug.LogFormat("eyePoseData.combinedEyePoseStatus: {0}", eyePoseData.combinedEyePoseStatus.ToString());
        //Debug.LogFormat("eyePoseData.leftEyeGazePoint: {0}, Vector: {1}", eyePoseData.leftEyeGazePoint.ToString("f6"), eyePoseData.leftEyeGazeVector.ToString("f6"));
        //Debug.LogFormat("eyePoseData.rightEyeGazePoint: {0}, Vector: {1}", eyePoseData.rightEyeGazePoint.ToString("f6"), eyePoseData.rightEyeGazeVector.ToString("f6"));
        //Debug.LogFormat("eyePoseData.combinedEyeGazePoint: {0}, Vector: {1}", eyePoseData.combinedEyeGazePoint.ToString("f6"), eyePoseData.combinedEyeGazeVector.ToString("f6"));
        var combinedDirection = Vector3.zero;

        if ((eyePoseData.combinedEyePoseStatus & (int)pvrEyePoseStatus.kGazeVectorValid) != 0)
        {
            combinedDirection = eyePoseData.combinedEyeGazeVector;
        }

        if (combinedDirection.sqrMagnitude > 0f)
        {
            combinedDirection.Normalize();
            //Debug.LogFormat("Eye Direction: ({0}, {1}, {2})", combinedDirection.x.ToString("f6"), combinedDirection.y.ToString("f6"), combinedDirection.z.ToString("f6"));
            float denominator = Vector3.Dot(combinedDirection, Vector3.forward);
            if (denominator > float.Epsilon)
            {
                eyePoint    = combinedDirection * frustumSize.z / denominator;
                eyePoint.x /= frustumSize.x; // [-1..1]
                eyePoint.y /= frustumSize.y; // [-1..1]
                //Debug.LogFormat("Eye Point: ({0}, {1})", eyePoint.x.ToString("f6"), eyePoint.y.ToString("f6"));
            }
        }
        return(eyePoint);
    }
Esempio n. 3
0
    public Vector3 GetEyeTrackingPos()
    {
        if (!Pvr_UnitySDKEyeManager.Instance.trackEyes)
        {
            return(Vector3.zero);
        }

        EyeDeviceInfo info = GetDeviceInfo();

        Vector3 frustumSize = Vector3.zero;

        frustumSize.x = 0.5f * (info.targetFrustumLeft.right - info.targetFrustumLeft.left);
        frustumSize.y = 0.5f * (info.targetFrustumLeft.top - info.targetFrustumLeft.bottom);
        frustumSize.z = info.targetFrustumLeft.near;

        bool result = Pvr_UnitySDKAPI.System.UPvr_getEyeTrackingData(ref eyePoseData);

        if (!result)
        {
            PLOG.E("UPvr_getEyeTrackingData failed " + result);
            return(Vector3.zero);
        }

        var combinedDirection = Vector3.zero;

        if ((eyePoseData.combinedEyePoseStatus & (int)pvrEyePoseStatus.kGazeVectorValid) != 0)
        {
            combinedDirection = eyePoseData.combinedEyeGazeVector;
        }

        if (combinedDirection.sqrMagnitude > 0f)
        {
            combinedDirection.Normalize();

            float denominator = Vector3.Dot(combinedDirection, Vector3.forward);
            if (denominator > float.Epsilon)
            {
                eyePoint    = combinedDirection * frustumSize.z / denominator;
                eyePoint.x /= frustumSize.x; // [-1..1]
                eyePoint.y /= frustumSize.y; // [-1..1]
            }
        }
        return(eyePoint);
    }