Skip to content

Instantly share code, notes, and snippets.

@Adamcbrz
Created April 22, 2019 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Adamcbrz/819568223e50d3e57a70bc1215998a8f to your computer and use it in GitHub Desktop.
Save Adamcbrz/819568223e50d3e57a70bc1215998a8f to your computer and use it in GitHub Desktop.
Tracker Tutorial: Update Tracker
vr::HmdMatrix34_t ATracker::UpdateTracker(int id)
{
//Get Tracker Pose
vr::VRControllerState_t *state = new vr::VRControllerState_t();
vr::TrackedDevicePose_t *pose = new vr::TrackedDevicePose_t();
vrSystem->GetControllerStateWithPose(vr::ETrackingUniverseOrigin::TrackingUniverseStanding, id, state, sizeof(vr::VRControllerState_t), pose);
//Get Pose Position
vr::HmdMatrix34_t posMat = pose->mDeviceToAbsoluteTracking;
// Update tracker only if we have decided which tracker to use
if (trackerID != -1)
{
//Build Quaternion From Matrix
float w = FGenericPlatformMath::Sqrt(1.0 + posMat.m[0][0] + posMat.m[1][1] + posMat.m[2][2]) / 2.0;
float w4 = (4.0 * w);
float x = (posMat.m[2][1] - posMat.m[1][2]) / w4;
float y = (posMat.m[0][2] - posMat.m[2][0]) / w4;
float z = (posMat.m[1][0] - posMat.m[0][1]) / w4;
// Postion and Rotate Actor
sceneComponent->SetWorldLocationAndRotationNoPhysics(
FVector(-posMat.m[2][3] * 100, posMat.m[0][3] * 100, posMat.m[1][3] * 100),
FQuat(z, -x, -y, w).Rotator());
}
return posMat;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment