Skip to content

Commit

Permalink
Improve standing transform on Pico and Wave (#3127)
Browse files Browse the repository at this point in the history
  • Loading branch information
MortimerGoro committed Apr 7, 2020
1 parent 1345296 commit 6ae4674
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
8 changes: 6 additions & 2 deletions app/src/picovr/cpp/DeviceDelegatePicoVR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
namespace crow {

static const vrb::Vector kAverageHeight(0.0f, 1.7f, 0.0f);
// TODO: Get real sitting to standing transform when SDK provides it
static const vrb::Vector kAverageSittingToStanding(0.0f, 1.2f, 0.0f);
// TODO: support different controllers & buttons
static const int32_t kMaxControllerCount = 3;
static const int32_t kNumButtons = 6;
Expand Down Expand Up @@ -282,10 +284,12 @@ DeviceDelegatePicoVR::RegisterImmersiveDisplay(ImmersiveDisplayPtr aDisplay) {
}

m.immersiveDisplay->SetDeviceName("Pico");
device::CapabilityFlags flags = device::Orientation | device::Present | device::ImmersiveVRSession | device::InlineSession;
device::CapabilityFlags flags = device::Orientation | device::Present |
device::ImmersiveVRSession | device::InlineSession;
if (m.type == k6DofHeadSet) {
flags |= device::Position;
flags |= device::Position | device::StageParameters;
}
m.immersiveDisplay->SetSittingToStandingTransform(vrb::Matrix::Translation(kAverageSittingToStanding));
m.immersiveDisplay->SetCapabilityFlags(flags);
m.immersiveDisplay->SetEyeResolution(m.renderWidth / 2, m.renderHeight / 2);
m.immersiveDisplay->CompleteEnumeration();
Expand Down
19 changes: 18 additions & 1 deletion app/src/wavevr/cpp/DeviceDelegateWaveVR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,22 @@ struct DeviceDelegateWaveVR::State {
ReleaseTextureQueues();
}

void UpdateStandingMatrix() {
if (!immersiveDisplay) {
return;
}
WVR_PoseState_t head;
WVR_PoseState_t ground;
WVR_GetPoseState(WVR_DeviceType_HMD, WVR_PoseOriginModel_OriginOnHead, 0, &head);
WVR_GetPoseState(WVR_DeviceType_HMD, WVR_PoseOriginModel_OriginOnGround, 0, &ground);
if (!head.isValidPose || !ground.isValidPose) {
immersiveDisplay->SetSittingToStandingTransform(vrb::Matrix::Translation(kAverageHeight));
return;
}
const float delta = ground.poseMatrix.m[1][3] - head.poseMatrix.m[1][3];
immersiveDisplay->SetSittingToStandingTransform(vrb::Matrix::Translation(vrb::Vector(0.0f, delta, 0.0f)));
}

void CreateController(Controller& aController) {
if (!delegate) {
VRB_ERROR("Failed to create controller. No ControllerDelegate has been set.");
Expand Down Expand Up @@ -458,7 +474,7 @@ DeviceDelegateWaveVR::RegisterImmersiveDisplay(ImmersiveDisplayPtr aDisplay) {

m.immersiveDisplay->SetCapabilityFlags(flags);
m.immersiveDisplay->SetEyeResolution(m.renderWidth, m.renderHeight);
m.immersiveDisplay->SetSittingToStandingTransform(vrb::Matrix::Translation(kAverageHeight));
m.UpdateStandingMatrix();
m.UpdateBoundary();
m.InitializeCameras();
m.immersiveDisplay->CompleteEnumeration();
Expand Down Expand Up @@ -636,6 +652,7 @@ DeviceDelegateWaveVR::ProcessEvents() {
WVR_InAppRecenter(WVR_RecenterType_YawAndPosition);
m.recentered = !m.ignoreNextRecenter;
m.ignoreNextRecenter = false;
m.UpdateStandingMatrix();
}
break;
case WVR_EventType_RecenterFail: {
Expand Down

0 comments on commit 6ae4674

Please sign in to comment.