void OverlayConductor::setEnabled(bool enabled) { if (enabled == _enabled) { return; } Menu::getInstance()->setIsOptionChecked(MenuOption::Overlays, enabled); _enabled = enabled; // set the new value // if the new state is visible/enabled... if (_enabled) { // alpha fadeIn the overlay mesh. qApp->getApplicationCompositor().fadeIn(); // enable mouse clicks from script qApp->getOverlays().enable(); // enable QML events auto offscreenUi = DependencyManager::get<OffscreenUi>(); offscreenUi->getRootItem()->setEnabled(true); if (_mode == STANDING) { // place the overlay at the current hmd position in world space MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar(); auto camMat = cancelOutRollAndPitch(myAvatar->getSensorToWorldMatrix() * qApp->getHMDSensorPose()); Transform t; t.setTranslation(extractTranslation(camMat)); t.setRotation(glm::quat_cast(camMat)); qApp->getApplicationCompositor().setModelTransform(t); } } else { // other wise, if the new state is hidden/not enabled // alpha fadeOut the overlay mesh. qApp->getApplicationCompositor().fadeOut(); // disable mouse clicks from script qApp->getOverlays().disable(); // disable QML events auto offscreenUi = DependencyManager::get<OffscreenUi>(); offscreenUi->getRootItem()->setEnabled(false); } }
void OverlayConductor::updateMode() { Mode newMode; if (qApp->isHMDMode()) { newMode = SITTING; } else { newMode = FLAT; } if (newMode != _mode) { switch (newMode) { case SITTING: { // enter the SITTING state // place the overlay at origin Transform identity; qApp->getApplicationCompositor().setModelTransform(identity); break; } case STANDING: { // enter the STANDING state // place the overlay at the current hmd position in world space MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar(); auto camMat = cancelOutRollAndPitch(myAvatar->getSensorToWorldMatrix() * qApp->getHMDSensorPose()); Transform t; t.setTranslation(extractTranslation(camMat)); t.setRotation(glm::quat_cast(camMat)); qApp->getApplicationCompositor().setModelTransform(t); break; } case FLAT: // do nothing break; } } _mode = newMode; }
void OpenVrDisplayPlugin::resetSensors() { _sensorResetMat = glm::inverse(cancelOutRollAndPitch(_trackedDevicePoseMat4[0])); }
void OpenVrDisplayPlugin::resetSensors() { Lock lock(_poseMutex); glm::mat4 m = toGlm(_trackedDevicePose[0].mDeviceToAbsoluteTracking); _sensorResetMat = glm::inverse(cancelOutRollAndPitch(m)); }