7 #include "VRCameraControl.h" 8 #include "imstkCamera.h" 9 #include "imstkLogger.h" 10 #include "imstkOpenVRDeviceClient.h" 12 using namespace imstk;
17 LOG(INFO) <<
"VRCameraControl controls";
18 LOG(INFO) <<
"----------------------------------------------------------------------";
19 LOG(INFO) <<
" | Left Trackpad - rotate view";
20 LOG(INFO) <<
" | Right Trakcpad - translate view";
21 LOG(INFO) <<
"----------------------------------------------------------------------";
28 m_deltaTransform = Mat4d::Identity();
29 if (m_camera ==
nullptr)
34 if (m_rotateDevice !=
nullptr)
36 m_rotateDevice->update();
38 const Vec2d& pos = m_rotateDevice->getTrackpadPosition();
39 const Mat4d& view = m_camera->getView();
41 view * mat4dRotation(Rotd(-pos[0] * m_rotateSpeedScale * dt, Vec3d(0.0, 1.0, 0.0))));
43 if (m_translateDevice !=
nullptr)
45 m_translateDevice->update();
47 const Vec2d& pos = m_translateDevice->getTrackpadPosition();
50 if (m_translateDevice->getButton(2))
52 dy = m_translateVerticalSpeedScale;
54 if (m_translateDevice->getButton(3))
56 dy = -m_translateVerticalSpeedScale;
60 const Mat4d& finalView = m_camera->getHMDView();
62 const Mat4d& userView = m_camera->getView();
72 const Mat4d inverseFinalView = finalView.inverse();
81 Vec3d worldViewXDir = inverseFinalView.col(0).head<3>().normalized();
82 const Vec3d yDir = Vec3d(0.0, 1.0, 0.0);
83 Vec3d worldViewZDir = inverseFinalView.col(2).head<3>().normalized();
90 const Vec3d movement = worldViewXDir * -pos[0] + worldViewZDir * pos[1] + yDir * dy;
91 m_deltaTransform = mat4dTranslate(movement * m_translateSpeedScale * dt);
92 m_camera->setView(userView * m_deltaTransform);
void update(const double &dt) override
Updates control based on current device state.
void printControls() override
Prints the controls.