private static void TrackerUpdateCallback(BETrackerUpdateInterop _trackerUpdateInterop) { if (BridgeEngineUnity.main != null) { BridgeEngineUnity.main.TrackerUpdate(ref _trackerUpdateInterop); } }
/** * Receive the 6DOF tracker updates from BridgeEngine. */ void TrackerUpdate(ref BETrackerUpdateInterop interop) { lastTrackerUpdate = interop; if (mainCamera != null) { #if !UNITY_EDITOR mainCamera.projectionMatrix = lastTrackerUpdate.cameraProj.ToMatrix(); // uses the intrinsics from Bridge Engine to get a correct projection matrix #endif mainCamera.transform.position = lastTrackerUpdate.pos.ToVector3(); mainCamera.transform.rotation = lastTrackerUpdate.rot.ToQuaternion(); mainCamera.transform.localScale = lastTrackerUpdate.scale.ToVector3(); } if (isStereoModeActive && stereoCamera != null) { stereoCamera.UpdateStereoSetup(lastTrackerUpdate.stereoSetup); } // Update the BEController's cameraTransform, from our latest mainCamera tracking. Matrix4x4 unityCameraWorldMatrix = mainCamera.transform.localToWorldMatrix; beMatrix4 beCameraWorldMatrix = new beMatrix4(); beCameraWorldMatrix.Set(unityCameraWorldMatrix); BridgeEngineUnityInterop.beControllerUpdateCamera(beCameraWorldMatrix); // Update the listeners if pose accuracy changes. bool poseAccuracyChanged = lastTrackerUpdate.trackerPoseAccuracy != interop.trackerPoseAccuracy; if (poseAccuracyChanged && onPoseAccuracyChanged != null) { onPoseAccuracyChanged.Invoke(interop.trackerPoseAccuracy); } if (onPoseChanged != null) { onPoseChanged.Invoke(); } // Refresh the camera texture last, so we have an opportunity to update the color samplers. CameraTextureUpdate(ref lastTrackerUpdate.cameraTextureInfo); }