Skip to content

Commit

Permalink
Merge pull request #59 from pupil-labs/messageTypeFix
Browse files Browse the repository at this point in the history
Fix 3d gaze demo for newest versions of Pupil Capture
  • Loading branch information
mkassner authored Jan 11, 2019
2 parents 834a200 + a76a206 commit ee377b4
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,6 @@ public void InitializeSubscriptionSocket(string topic)
if ( PupilTools.ReceiveDataIsSet )
{
PupilTools.ReceiveData( msgType, MessagePackSerializer.Deserialize<Dictionary<string,object>> (mStream), thirdFrame);
continue;
}

switch(msgType)
Expand All @@ -168,6 +167,9 @@ public void InitializeSubscriptionSocket(string topic)
case "gaze.2d.1.":
case "pupil.0":
case "pupil.1":
case "gaze.3d.0.":
case "gaze.3d.1.":
case "gaze.3d.01.":
var dictionary = MessagePackSerializer.Deserialize<Dictionary<string,object>> (mStream);
var confidence = PupilTools.FloatFromDictionary(dictionary,"confidence");
if ( PupilTools.IsCalibrating )
Expand All @@ -176,17 +178,20 @@ public void InitializeSubscriptionSocket(string topic)
PupilTools.UpdateCalibrationConfidence(eyeID,confidence);
break;
}
if ((confidence > confidenceThreshold) && msgType.StartsWith("gaze"))
{
PupilTools.gazeDictionary = dictionary;
}
else if (msgType.StartsWith("gaze"))
{
if(confidence > confidenceThreshold)
{
PupilTools.gazeDictionary = dictionary;
}
}

break;
case "frame.eye.0":
case "frame.eye.1":
break;
default:
Debug.Log(msgType);
default:
Debug.Log("No case to handle message with message type " + msgType);
break;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ public static PupilGazeTracker Instance
public DrawMenuDeleg DrawMenu;
public OnUpdateDeleg OnUpdate;

bool updateInitialTranslation = true;

#endregion

public PupilGazeTracker ()
Expand All @@ -66,12 +68,10 @@ void Start ()

PupilTools.IsConnected = false;
PupilTools.IsIdle = true;

var relativeRightEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.RightEye) - UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.CenterEye);
PupilTools.Calibration.rightEyeTranslation = new float[] { relativeRightEyePosition.z*PupilSettings.PupilUnitScalingFactor, 0, 0 };
var relativeLeftEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.LeftEye) - UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.CenterEye);
PupilTools.Calibration.leftEyeTranslation = new float[] { relativeLeftEyePosition.z*PupilSettings.PupilUnitScalingFactor, 0, 0 };


PupilTools.Calibration.rightEyeTranslation = new float[] {0,0,0};
PupilTools.Calibration.leftEyeTranslation = new float[] {0,0,0};

#if !UNITY_WSA
RunConnect ();
#endif
Expand All @@ -88,10 +88,17 @@ public void RunConnect()

void Update ()
{

if(updateInitialTranslation)
{
//might be inconsistent during the first frames -> updating until calibration starts
UpdateEyesTranslation();
}

if (PupilTools.IsCalibrating)
{
PupilTools.Calibration.UpdateCalibration ();
}
}

PupilTools.Connection.UpdateSubscriptionSockets ();

Expand All @@ -103,6 +110,7 @@ void Update ()
} else
{
PupilTools.StartCalibration ();
updateInitialTranslation = false;
}
}
#if !UNITY_WSA
Expand All @@ -128,6 +136,29 @@ void Update ()
Instance.OnUpdate ();
}

void UpdateEyesTranslation()
{
Vector3 leftEye = UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.LeftEye);
Vector3 rightEye = UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.RightEye);
Vector3 centerEye = UnityEngine.XR.InputTracking.GetLocalPosition (UnityEngine.XR.XRNode.CenterEye);
Quaternion centerRotation = UnityEngine.XR.InputTracking.GetLocalRotation (UnityEngine.XR.XRNode.CenterEye);

//convert local coords into center eye coordinates
Vector3 globalCenterPos = Quaternion.Inverse(centerRotation) * centerEye;
Vector3 globalLeftEyePos = Quaternion.Inverse(centerRotation) * leftEye;
Vector3 globalRightEyePos = Quaternion.Inverse(centerRotation) * rightEye;

//right
var relativeRightEyePosition = globalRightEyePos - globalCenterPos;
relativeRightEyePosition *= PupilSettings.PupilUnitScalingFactor;
PupilTools.Calibration.rightEyeTranslation = new float[] { relativeRightEyePosition.x, relativeRightEyePosition.y, relativeRightEyePosition.z };

//left
var relativeLeftEyePosition = globalLeftEyePos - globalCenterPos;
relativeLeftEyePosition *= PupilSettings.PupilUnitScalingFactor;
PupilTools.Calibration.leftEyeTranslation = new float[] { relativeLeftEyePosition.x, relativeLeftEyePosition.y, relativeLeftEyePosition.z };
}

#endregion

void OnEnable ()
Expand Down

0 comments on commit ee377b4

Please sign in to comment.