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)
     });
 }
示例#2
0
 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));
        }
示例#5
0
    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);
    }
示例#6
0
    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
    }
示例#8
0
    public static OVRPose TrackingSpacePoseToUnityWorldSpacePose(OVRPlugin.Posef pose)
    {
        OVRPose worldPose = OVRExtensions.ToWorldSpacePose(pose.ToOVRPose());

        return(worldPose);
    }