MCPcopy Create free account
hub / github.com/LibreVR/Revive / ovr_SpecifyTrackingOrigin

Function ovr_SpecifyTrackingOrigin

Revive/REV_CAPI.cpp:342–370  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

340}
341
342OVR_PUBLIC_FUNCTION(ovrResult) ovr_SpecifyTrackingOrigin(ovrSession session, ovrPosef originPose)
343{
344 vr::ChaperoneCalibrationState calibrationState = vr::VRChaperone()->GetCalibrationState();
345 if (calibrationState >= vr::ChaperoneCalibrationState_Error)
346 return ovrSuccess_BoundaryInvalid;
347
348 float yaw = 0.0f;
349 OVR::Posef(originPose).Rotation.GetYawPitchRoll(&yaw, nullptr, nullptr);
350 if (yaw == 0.0f && OVR::Posef(originPose).Rotation != OVR::Quatf::Identity())
351 return ovrError_InvalidParameter;
352
353 vr::HmdMatrix34_t workingPose;
354 vr::ETrackingUniverseOrigin origin = vr::VRCompositor()->GetTrackingSpace();
355 vr::VRChaperoneSetup()->RevertWorkingCopy();
356 if (origin == vr::TrackingUniverseOrigin::TrackingUniverseSeated)
357 vr::VRChaperoneSetup()->GetWorkingSeatedZeroPoseToRawTrackingPose(&workingPose);
358 else
359 vr::VRChaperoneSetup()->GetWorkingStandingZeroPoseToRawTrackingPose(&workingPose);
360
361 workingPose = REV::Matrix4f(OVR::Matrix4f::RotationY(yaw) * REV::Matrix4f(workingPose) *
362 OVR::Matrix4f::Translation(originPose.Position));
363
364 if (origin == vr::TrackingUniverseOrigin::TrackingUniverseSeated)
365 vr::VRChaperoneSetup()->SetWorkingSeatedZeroPoseToRawTrackingPose(&workingPose);
366 else
367 vr::VRChaperoneSetup()->SetWorkingStandingZeroPoseToRawTrackingPose(&workingPose);
368 vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
369 return ovrSuccess;
370}
371
372OVR_PUBLIC_FUNCTION(void) ovr_ClearShouldRecenterFlag(ovrSession session)
373{

Callers

nothing calls this directly

Calls 2

PosefClass · 0.70
Matrix4fClass · 0.70

Tested by

no test coverage detected