void Start() { if (UnityEngine.XR.XRDevice.isPresent) { var oldOrigin = MixCast.Settings.oculusOrigin; var newOrigin = TrackingSpaceOrigin.GetOriginOffsetData(); //Debug.Log("Old: " + oldOrigin); //Debug.Log("New: " + newOrigin); if (WasOriginChanged(oldOrigin, newOrigin)) { Debug.Log("MixCast: Tracking Space Origin change detected! All cameras will reset to default positions."); if (handle == ChangeHandle.ResetPositions) { ResetCamerasPosition(); } else { ApplyNewOffsetToSettings(oldOrigin, newOrigin); } SaveSettings(newOrigin); } } }
public bool GetDeviceTransformByIndex_SteamVR(int index, out Vector3 position, out Quaternion rotation) { if (index < 0 || index >= trackedObjects.Length) { position = Vector3.zero; rotation = Quaternion.identity; return(false); } TrackedDevicePose_t pose = trackedObjects[index]; if (pose.bDeviceIsConnected && pose.bPoseIsValid && pose.eTrackingResult == ETrackingResult.Running_OK) { Matrix4x4 poseMat = TrackingSpaceOrigin.ConvertMatrixOpenVRToUnity(pose.mDeviceToAbsoluteTracking); position = TrackingSpaceOrigin.ExtractPosition(poseMat); position.z *= -1; //flip for OpenGL to DirectX conversion Quaternion quat = TrackingSpaceOrigin.ExtractRotation(poseMat); quat = Quaternion.Euler(new Vector3(-quat.eulerAngles.x, -quat.eulerAngles.y, quat.eulerAngles.z)); rotation = quat; return(true); } else { position = Vector3.zero; rotation = Quaternion.identity; return(false); } }
private void SetTransformFromOldPoseToNewPose(MixCastData.SensorPose oldPose, Vector3 newPos, Quaternion newRot) { Vector3 pos; Quaternion rot; TrackingSpaceOrigin.GetOriginOffsetData(newPos, newRot, oldPose.position, oldPose.rotation, out pos, out rot); transform.localPosition = cachedPosition + pos; //Remove orientation change for the camera. Will remove for next release. //transform.localRotation = cachedRotation * rot; }