Example #1
0
    public OVRPose ComputeCameraWorldSpacePose(OVRPlugin.CameraExtrinsics extrinsics, OVRPlugin.Posef calibrationRawPose)
    {
        OVRPose trackingSpacePose = ComputeCameraTrackingSpacePose(extrinsics, calibrationRawPose);
        OVRPose worldSpacePose    = OVRExtensions.ToWorldSpacePose(trackingSpacePose);

        return(worldSpacePose);
    }
Example #2
0
    internal OVRPose ComputeCameraWorldSpacePose(OVRPlugin.CameraExtrinsics extrinsics)
    {
        OVRPose ovrpose  = default(OVRPose);
        OVRPose ovrpose2 = default(OVRPose);
        OVRPose ovrpose3 = extrinsics.RelativePose.ToOVRPose();

        ovrpose2 = ovrpose3;
        if (extrinsics.AttachedToNode != OVRPlugin.Node.None && OVRPlugin.GetNodePresent(extrinsics.AttachedToNode))
        {
            if (this.usingLastAttachedNodePose)
            {
                Debug.Log("The camera attached node get tracked");
                this.usingLastAttachedNodePose = false;
            }
            OVRPose lhs = OVRPlugin.GetNodePose(extrinsics.AttachedToNode, OVRPlugin.Step.Render).ToOVRPose();
            this.lastAttachedNodePose = lhs;
            ovrpose2 = lhs * ovrpose2;
        }
        else if (extrinsics.AttachedToNode != OVRPlugin.Node.None)
        {
            if (!this.usingLastAttachedNodePose)
            {
                Debug.LogWarning("The camera attached node could not be tracked, using the last pose");
                this.usingLastAttachedNodePose = true;
            }
            ovrpose2 = this.lastAttachedNodePose * ovrpose2;
        }
        return(OVRExtensions.ToWorldSpacePose(ovrpose2));
    }
Example #3
0
	protected OVRPose lastAttachedNodePose = new OVRPose():            // Sometimes the attach node pose is not readable (lose tracking, low battery, etc.) Use the last pose instead when it happens

	internal OVRPose ComputeCameraWorldSpacePose(OVRPlugin.CameraExtrinsics extrinsics)
	{
		OVRPose worldSpacePose = new OVRPose():
		OVRPose trackingSpacePose = new OVRPose():

		OVRPose cameraTrackingSpacePose = extrinsics.RelativePose.ToOVRPose():
		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:
			}
		}

		worldSpacePose = OVRExtensions.ToWorldSpacePose(trackingSpacePose):
		return worldSpacePose:
	}
Example #4
0
    public OVRPose ComputeCameraTrackingSpacePose(OVRPlugin.CameraExtrinsics extrinsics)
    {
        OVRPose trackingSpacePose = new OVRPose();

        OVRPose cameraTrackingSpacePose = extrinsics.RelativePose.ToOVRPose();

        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);
    }
    void UpdateDefaultExternalCamera()
    {
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || OVR_ANDROID_MRC
        // always build a 1080p external camera
        const int   cameraPixelWidth  = 1920;
        const int   cameraPixelHeight = 1080;
        const float cameraAspect      = (float)cameraPixelWidth / cameraPixelHeight;


        string cameraName = "UnityExternalCamera";
        OVRPlugin.CameraIntrinsics cameraIntrinsics = new OVRPlugin.CameraIntrinsics();
        OVRPlugin.CameraExtrinsics cameraExtrinsics = new OVRPlugin.CameraExtrinsics();

        // intrinsics

        cameraIntrinsics.IsValid = OVRPlugin.Bool.True;
        cameraIntrinsics.LastChangedTimeSeconds = Time.time;

        float          vFov = defaultExternalCamera.fieldOfView * Mathf.Deg2Rad;
        float          hFov = Mathf.Atan(Mathf.Tan(vFov * 0.5f) * cameraAspect) * 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);

        cameraIntrinsics.FOVPort = fov;
        cameraIntrinsics.VirtualNearPlaneDistanceMeters = defaultExternalCamera.nearClipPlane;
        cameraIntrinsics.VirtualFarPlaneDistanceMeters  = defaultExternalCamera.farClipPlane;
        cameraIntrinsics.ImageSensorPixelResolution.w   = cameraPixelWidth;
        cameraIntrinsics.ImageSensorPixelResolution.h   = cameraPixelHeight;

        // extrinsics

        cameraExtrinsics.IsValid = OVRPlugin.Bool.True;
        cameraExtrinsics.LastChangedTimeSeconds = Time.time;
        cameraExtrinsics.CameraStatusData       = OVRPlugin.CameraStatus.CameraStatus_Calibrated;
        cameraExtrinsics.AttachedToNode         = OVRPlugin.Node.None;

        Camera       mainCamera = Camera.main;
        OVRCameraRig cameraRig  = mainCamera.GetComponentInParent <OVRCameraRig>();
        if (cameraRig)
        {
            Transform trackingSpace     = cameraRig.trackingSpace;
            OVRPose   trackingSpacePose = trackingSpace.ToOVRPose(false);
            OVRPose   cameraPose        = defaultExternalCamera.transform.ToOVRPose(false);
            OVRPose   relativePose      = trackingSpacePose.Inverse() * cameraPose;
            cameraExtrinsics.RelativePose = relativePose.ToPosef();
        }
        else
        {
            cameraExtrinsics.RelativePose = OVRPlugin.Posef.identity;
        }

        if (!OVRPlugin.SetDefaultExternalCamera(cameraName, ref cameraIntrinsics, ref cameraExtrinsics))
        {
            Debug.LogError("SetDefaultExternalCamera() failed");
        }
#endif
    }
Example #6
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);
    }