void Update() { // Returns current state of the gaze data = VarjoPlugin.GetGaze(); // Check if gaze data is valid and calibrated if (data.status != VarjoPlugin.GazeStatus.INVALID) { switch (eye) { case Eye.both: // Gaze data forward and position comes as 3 doubles: x,y,z. You need to construct a vector from them to a desired format. gazeRayForward = new Vector3((float)data.gaze.forward[0], (float)data.gaze.forward[1], (float)data.gaze.forward[2]); gazePosition = new Vector3((float)data.gaze.position[0], (float)data.gaze.position[1], (float)data.gaze.position[2]); break; case Eye.left: gazeRayForward = new Vector3((float)data.left.forward[0], (float)data.left.forward[1], (float)data.left.forward[2]); gazePosition = new Vector3((float)data.left.position[0], (float)data.left.position[1], (float)data.left.position[2]); break; case Eye.right: gazeRayForward = new Vector3((float)data.right.forward[0], (float)data.right.forward[1], (float)data.right.forward[2]); gazePosition = new Vector3((float)data.right.position[0], (float)data.right.position[1], (float)data.right.position[2]); break; } // Fetch head pose transform.position = VarjoManager.Instance.HeadTransform.position; transform.rotation = VarjoManager.Instance.HeadTransform.rotation; // Transform gaze direction and origin from HMD space to world space gazeRayDirection = transform.TransformVector(gazeRayForward); gazeRayOrigin = transform.TransformPoint(gazePosition); // Raycast into world if (Physics.SphereCast(gazeRayOrigin, gazeRayRadius, gazeRayDirection, out gazeRayHit)) { // Use layers or tags preferably to identify looked objects in your application. // This is done here via GetComponent for clarity's sake as example. VarjoGazeTarget target = gazeRayHit.collider.gameObject.GetComponent <VarjoGazeTarget>(); if (target != null) { target.OnHit(); } if (drawDebug) { Debug.DrawLine(gazeRayOrigin, gazeRayOrigin + gazeRayDirection * 10.0f, Color.green); } } else { if (drawDebug) { Debug.DrawLine(gazeRayOrigin, gazeRayOrigin + gazeRayDirection * 10.0f, Color.white); } } } }
void RequestGazeCalDelayed() { VarjoPlugin.GazeData data = VarjoPlugin.GetGaze(); if (data.status != VarjoPlugin.GazeStatus.VALID) { GetComponent <VarjoExample.VarjoGazeCalibrationRequest>().RequestGazeCalibration(); } }
void Update() { if (!calibrated) { VarjoPlugin.GazeData data = VarjoPlugin.GetGaze(); if (data.status == VarjoPlugin.GazeStatus.VALID) { calibrated = true; endcription.Perform(); mooseAnimation.enabled = true; } } }
void LogGazeData(VarjoPlugin.GazeData data) { // Get HMD position and rotation hmdPosition = VarjoManager.Instance.HeadTransform.position; hmdRotation = VarjoManager.Instance.HeadTransform.rotation.eulerAngles; string[] logData = new string[18]; // Gaze data frame number logData[0] = data.frameNumber.ToString(); // Gaze data capture time (nanoseconds) logData[1] = data.captureTime.ToString(); // Log time (milliseconds) logData[2] = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond).ToString(); // HMD logData[3] = hmdPosition.ToString("F3"); logData[4] = hmdRotation.ToString("F3"); // Combined gaze bool invalid = data.status == VarjoPlugin.GazeStatus.INVALID; logData[5] = invalid ? InvalidString : ValidString; logData[6] = invalid ? "" : Double3ToString(data.gaze.forward); logData[7] = invalid ? "" : Double3ToString(data.gaze.position); // Left eye bool leftInvalid = data.leftStatus == VarjoPlugin.GazeEyeStatus.EYE_INVALID; logData[8] = leftInvalid ? InvalidString : ValidString; logData[9] = leftInvalid ? "" : Double3ToString(data.left.forward); logData[10] = leftInvalid ? "" : Double3ToString(data.left.position); logData[11] = leftInvalid ? "" : data.leftPupilSize.ToString(); // Right eye bool rightInvalid = data.rightStatus == VarjoPlugin.GazeEyeStatus.EYE_INVALID; logData[12] = rightInvalid ? InvalidString : ValidString; logData[13] = rightInvalid ? "" : Double3ToString(data.right.forward); logData[14] = rightInvalid ? "" : Double3ToString(data.right.position); logData[15] = rightInvalid ? "" : data.rightPupilSize.ToString(); // Focus logData[16] = invalid ? "" : data.focusDistance.ToString(); logData[17] = invalid ? "" : data.focusStability.ToString(); //Debug.Log("Log HMD Pos: " + logData[3]); //Debug.Log("Log HMD Rot: " + logData[4]); }
private void GazeRay() { // Returns current state of the gaze data = VarjoPlugin.GetGaze(); // Check if gaze data is valid and calibrated if (data.status != VarjoPlugin.GazeStatus.INVALID) { switch (eye) { case Eye.both: // Gaze data forward and position comes as 3 doubles: x,y,z. You need to construct a vector from them to a desired format. gazeRayForward = new Vector3((float)data.gaze.forward[0], (float)data.gaze.forward[1], (float)data.gaze.forward[2]); gazePosition = new Vector3((float)data.gaze.position[0], (float)data.gaze.position[1], (float)data.gaze.position[2]); break; case Eye.left: gazeRayForward = new Vector3((float)data.left.forward[0], (float)data.left.forward[1], (float)data.left.forward[2]); gazePosition = new Vector3((float)data.left.position[0], (float)data.left.position[1], (float)data.left.position[2]); break; case Eye.right: gazeRayForward = new Vector3((float)data.right.forward[0], (float)data.right.forward[1], (float)data.right.forward[2]); gazePosition = new Vector3((float)data.right.position[0], (float)data.right.position[1], (float)data.right.position[2]); break; } // Fetch head pose transform.position = VarjoManager.Instance.HeadTransform.position; transform.rotation = VarjoManager.Instance.HeadTransform.rotation; // Transform gaze direction and origin from HMD space to world space gazeRayDirection = transform.TransformVector(gazeRayForward); gazeRayOrigin = transform.TransformPoint(gazePosition); gazeCircle.gameObject.transform.position = gazeRayOrigin + (gazeRayDirection * 7.0f); ChangeGazeCircleSize(data.focusDistance); // Raycast into world if (Physics.SphereCast(gazeRayOrigin, gazeRayRadius, gazeRayDirection, out gazeRayHit)) { if (drawDebug) { Debug.DrawLine(gazeRayOrigin, gazeRayOrigin + gazeRayDirection * 10.0f, Color.green); } HeatmapDataReceiver dataTarget = gazeRayHit.collider.gameObject.GetComponent <HeatmapDataReceiver>(); if (dataTarget != null) { dataTarget.ReceivePosition(gazeRayHit.point, gazeRayRadius); } GazeTargetPanel panelTarget = gazeRayHit.collider.gameObject.GetComponent <GazeTargetPanel>(); if (panelTarget != null) { panelTarget.OnGazeRayHit(); } } else { if (drawDebug) { Debug.DrawLine(gazeRayOrigin, gazeRayOrigin + gazeRayDirection * 10.0f, Color.white); } } } }