コード例 #1
0
 internal static void HMDWriteEye(this XmlWriter file, IVRGazeDataEye eye, string name)
 {
     file.WriteStartElement(name);
     file.WriteWithValid("GazeDirection", eye.GazeDirection.ToString(FORMAT_FLOAT), eye.GazeDirectionValid);
     file.WriteWithValid("GazeOrigin", eye.GazeOrigin.ToString(FORMAT_FLOAT), eye.GazeOriginValid);
     file.WriteWithValid("PupilDiameter", eye.PupilDiameter.ToString(FORMAT_FLOAT), eye.PupilDiameterValid);
     file.WriteRay(eye.GazeRayWorld, eye.GazeRayWorldValid, "GazeRayWorld");
     file.WriteEndElement();
 }
コード例 #2
0
    private void WriteTobiiEyeData(string header, IVRGazeDataEye eye)
    {
        SaveInfo.AddToNestedDictionary(header, "PupilDiameter", eye.PupilDiameter.ToString(FORMAT_FLOAT));
        SaveInfo.AddToNestedDictionary(header, "PupilPosition_X", eye.PupilPosiitionInTrackingArea.x.ToString(FORMAT_FLOAT));
        SaveInfo.AddToNestedDictionary(header, "PupilPosition_Y", eye.PupilPosiitionInTrackingArea.y.ToString(FORMAT_FLOAT));

        SaveInfo.AddToNestedDictionary(header, "RayOrigin_X", eye.GazeRayWorld.origin.x.ToString(FORMAT_FLOAT));
        SaveInfo.AddToNestedDictionary(header, "RayOrigin_Y", eye.GazeRayWorld.origin.y.ToString(FORMAT_FLOAT));
        SaveInfo.AddToNestedDictionary(header, "RayOrigin_Z", eye.GazeRayWorld.origin.z.ToString(FORMAT_FLOAT));

        SaveInfo.AddToNestedDictionary(header, "RayDirection_X", eye.GazeRayWorld.direction.x.ToString(FORMAT_FLOAT));
        SaveInfo.AddToNestedDictionary(header, "RayDirection_Y", eye.GazeRayWorld.direction.y.ToString(FORMAT_FLOAT));
        SaveInfo.AddToNestedDictionary(header, "RayDirection_Z", eye.GazeRayWorld.direction.z.ToString(FORMAT_FLOAT));
    }
コード例 #3
0
    /// <summary>
    /// Animate facial expression blend shapes.
    /// </summary>
    /// <param name="newDirectionL">The gaze direction for the left eye.</param>
    /// <param name="newDirectionR">The gaze direction for the right eye.</param>
    /// <param name="eyeDataLeft">Eye data for the left eye.</param>
    /// <param name="eyeDataRight">Eye data for the right eye.</param>
    private void AnimateEyeLid(IVRGazeDataEye leftEye, IVRGazeDataEye rightEye)
    {
        // Determine if Eyes are closed
        //var leftEyeClosed = leftEye.PupilPosiitionInTrackingAreaValid ? false : true;
        //var rightEyeClosed = rightEye.PupilPosiitionInTrackingAreaValid ? false : true;

        // If eye openness data is invalid use last value.\
        //TobiiXR has useful function to determine if eye is blinking.
        var leftEyeClosed  = (TobiiXR.EyeTrackingData.Left.EyeOpennessIsValid) ? (TobiiXR.EyeTrackingData.Left.EyeOpenness < 0.5f) : _leftEyeClosed;
        var rightEyeClosed = (TobiiXR.EyeTrackingData.Right.EyeOpennessIsValid) ? (TobiiXR.EyeTrackingData.Right.EyeOpenness < 0.5f) : _rightEyeClosed;

        var leftEyeBlinkValue  = leftEyeClosed ? 100 : 0;
        var rightEyeBlinkValue = rightEyeClosed ? 100 : 0;

        // If eye openness has changed reset animation curve.
        if (leftEyeClosed != _leftEyeClosed)
        {
            _animationProgressL = 0;
        }
        if (rightEyeClosed != _rightEyeClosed)
        {
            _animationProgressR = 0;
        }

        _blinkL = Mathf.Lerp(_blinkL, leftEyeBlinkValue, _blendShapeAnimationCurve.Evaluate(_animationProgressL));
        _blinkR = Mathf.Lerp(_blinkR, rightEyeBlinkValue, _blendShapeAnimationCurve.Evaluate(_animationProgressR));

        _bodyBlendShape.SetBlendShapeWeight(BlendShapeLeftEyeLid, _blinkL);
        _bodyBlendShape.SetBlendShapeWeight(BlendShapeRightEyeLid, _blinkR);

        _leftEyeClosed  = leftEyeClosed;
        _rightEyeClosed = rightEyeClosed;

        _animationProgressL += Time.deltaTime / _blendShapeAnimationTimeSeconds;
        _animationProgressR += Time.deltaTime / _blendShapeAnimationTimeSeconds;
    }