internal static OVRPose ToOVRPose(this OVRPlugin.Posef p) { return(new OVRPose() { position = new Vector3(p.Position.x, p.Position.y, -p.Position.z), orientation = new Quaternion(-p.Orientation.x, -p.Orientation.y, p.Orientation.z, p.Orientation.w) }); }
public OVRPlugin.Posef ToPosef() { OVRPlugin.Posef result = new OVRPlugin.Posef(); result.Position.x = position.x; result.Position.y = position.y; result.Position.z = -position.z; result.Orientation.x = -orientation.x; result.Orientation.y = -orientation.y; result.Orientation.z = orientation.z; result.Orientation.w = orientation.w; return(result); }
public bool GetDeviceTransformByRole_Oculus(DeviceRole role, out Vector3 position, out Quaternion rotation) { OVRPlugin.Node node; switch (role) { case DeviceRole.Head: node = OVRPlugin.Node.Head; break; case DeviceRole.LeftHand: node = OVRPlugin.Node.HandLeft; break; case DeviceRole.RightHand: node = OVRPlugin.Node.HandRight; break; default: position = Vector3.zero; rotation = Quaternion.identity; return(false); } if (OVRPlugin.GetNodePositionTracked(node) && OVRPlugin.GetNodeOrientationTracked(node)) { OVRPlugin.Posef pose = OVRPlugin.GetNodePose(node, OVRPlugin.Step.Render); position = new Vector3(pose.Position.x, pose.Position.y, pose.Position.z); rotation = new Quaternion(pose.Orientation.x, pose.Orientation.y, pose.Orientation.z, pose.Orientation.w); return(true); } else { position = Vector3.zero; rotation = Quaternion.identity; return(false); } }
private static RigidPose ToPose(OVRPlugin.Posef value) { var ovrPose = value.ToOVRPose(); return(new RigidPose(ovrPose.position, ovrPose.orientation)); }
public OVRPose ComputeCameraTrackingSpacePose(OVRPlugin.CameraExtrinsics extrinsics, OVRPlugin.Posef calibrationRawPose) { OVRPose trackingSpacePose = new OVRPose(); OVRPose cameraTrackingSpacePose = extrinsics.RelativePose.ToOVRPose(); #if OVR_ANDROID_MRC OVRPose rawPose = OVRPlugin.GetTrackingTransformRawPose().ToOVRPose(); cameraTrackingSpacePose = rawPose * (calibrationRawPose.ToOVRPose().Inverse() * cameraTrackingSpacePose); #endif trackingSpacePose = cameraTrackingSpacePose; if (extrinsics.AttachedToNode != OVRPlugin.Node.None && OVRPlugin.GetNodePresent(extrinsics.AttachedToNode)) { if (usingLastAttachedNodePose) { Debug.Log("The camera attached node get tracked"); usingLastAttachedNodePose = false; } OVRPose attachedNodePose = OVRPlugin.GetNodePose(extrinsics.AttachedToNode, OVRPlugin.Step.Render).ToOVRPose(); lastAttachedNodePose = attachedNodePose; trackingSpacePose = attachedNodePose * trackingSpacePose; } else { if (extrinsics.AttachedToNode != OVRPlugin.Node.None) { if (!usingLastAttachedNodePose) { Debug.LogWarning("The camera attached node could not be tracked, using the last pose"); usingLastAttachedNodePose = true; } trackingSpacePose = lastAttachedNodePose * trackingSpacePose; } } return(trackingSpacePose); }
public OVRPose ComputeCameraWorldSpacePose(OVRPlugin.CameraExtrinsics extrinsics, OVRPlugin.Posef calibrationRawPose) { OVRPose trackingSpacePose = ComputeCameraTrackingSpacePose(extrinsics, calibrationRawPose); OVRPose worldSpacePose = OVRExtensions.ToWorldSpacePose(trackingSpacePose); return(worldSpacePose); }
// Update is called once per frame void Update() { #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || OVR_ANDROID_MRC if (!inited) { Initialize(); return; } if (!defaultExternalCamera) { return; } #if OVR_ANDROID_MRC if (!OVRPlugin.Media.GetInitialized()) { return; } #else if (!OVRPlugin.IsMixedRealityInitialized()) { return; } #endif if (OVRInput.GetDown(OVRInput.Button.One)) { if (currentMode == CameraMode.ThirdPerson) { currentMode = CameraMode.Normal; } else { currentMode = currentMode + 1; } Debug.LogFormat("Camera mode change to {0}", currentMode); } if (currentMode == CameraMode.Normal) { UpdateDefaultExternalCamera(); OVRPlugin.OverrideExternalCameraFov(0, false, new OVRPlugin.Fovf()); OVRPlugin.OverrideExternalCameraStaticPose(0, false, OVRPlugin.Posef.identity); } else if (currentMode == CameraMode.OverrideFov) { OVRPlugin.Fovf fov = defaultFov; OVRPlugin.Fovf newFov = new OVRPlugin.Fovf(); newFov.LeftTan = fov.LeftTan * 2.0f; newFov.RightTan = fov.RightTan * 2.0f; newFov.UpTan = fov.UpTan * 2.0f; newFov.DownTan = fov.DownTan * 2.0f; OVRPlugin.OverrideExternalCameraFov(0, true, newFov); OVRPlugin.OverrideExternalCameraStaticPose(0, false, OVRPlugin.Posef.identity); if (!OVRPlugin.GetUseOverriddenExternalCameraFov(0)) { Debug.LogWarning("FOV not overridden"); } } else if (currentMode == CameraMode.ThirdPerson) { Camera camera = GetComponent <Camera>(); if (camera == null) { return; } float vFov = camera.fieldOfView * Mathf.Deg2Rad; float hFov = Mathf.Atan(Mathf.Tan(vFov * 0.5f) * camera.aspect) * 2.0f; OVRPlugin.Fovf fov = new OVRPlugin.Fovf(); fov.UpTan = fov.DownTan = Mathf.Tan(vFov * 0.5f); fov.LeftTan = fov.RightTan = Mathf.Tan(hFov * 0.5f); OVRPlugin.OverrideExternalCameraFov(0, true, fov); Camera mainCamera = Camera.main; OVRCameraRig cameraRig = mainCamera.GetComponentInParent <OVRCameraRig>(); if (cameraRig) { Transform trackingSpace = cameraRig.trackingSpace; OVRPose trackingSpacePose = trackingSpace.ToOVRPose(false); OVRPose cameraPose = transform.ToOVRPose(false); OVRPose relativePose = trackingSpacePose.Inverse() * cameraPose; OVRPlugin.Posef relativePosef = relativePose.ToPosef(); OVRPlugin.OverrideExternalCameraStaticPose(0, true, relativePosef); } else { OVRPlugin.OverrideExternalCameraStaticPose(0, false, OVRPlugin.Posef.identity); } if (!OVRPlugin.GetUseOverriddenExternalCameraFov(0)) { Debug.LogWarning("FOV not overridden"); } if (!OVRPlugin.GetUseOverriddenExternalCameraStaticPose(0)) { Debug.LogWarning("StaticPose not overridden"); } } #endif }
public static OVRPose TrackingSpacePoseToUnityWorldSpacePose(OVRPlugin.Posef pose) { OVRPose worldPose = OVRExtensions.ToWorldSpacePose(pose.ToOVRPose()); return(worldPose); }