Showing the changes to interface/src/Application.cpp (1 of 17 files). Show all
Unified · Split
| @@ -2492,7 +2492,7 @@ void Application::initializeUi() { · 2491 unmodified lines | |||
| 2492 | offscreenSurfaceCache->reserve(Web3DOverlay::QML, 2); | 2492 | offscreenSurfaceCache->reserve(Web3DOverlay::QML, 2); |
| 2493 | } | 2493 | } |
| 2494 | 2494 | ||
| 2495 | void Application::updateCamera(RenderArgs& renderArgs) { | 2495 | void Application::updateCamera(RenderArgs& renderArgs, float deltaTime) { |
| 2496 | PROFILE_RANGE(render, __FUNCTION__); | 2496 | PROFILE_RANGE(render, __FUNCTION__); |
| 2497 | PerformanceTimer perfTimer("updateCamera"); | 2497 | PerformanceTimer perfTimer("updateCamera"); |
| 2498 | 2498 | ||
| @@ -2507,6 +2507,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 8 unmodified lines | |||
| 2507 | // Using the latter will cause the camera to wobble with idle animations, | 2507 | // Using the latter will cause the camera to wobble with idle animations, |
| 2508 | // or with changes from the face tracker | 2508 | // or with changes from the face tracker |
| 2509 | if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { | 2509 | if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { |
| 2510 | _thirdPersonHMDCameraBoomValid= false; | ||
| 2510 | if (isHMDMode()) { | 2511 | if (isHMDMode()) { |
| 2511 | mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); | 2512 | mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); |
| 2512 | _myCamera.setPosition(extractTranslation(camMat)); | 2513 | _myCamera.setPosition(extractTranslation(camMat)); |
| @@ -2519,12 +2520,25 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 6 unmodified lines | |||
| 2519 | } | 2520 | } |
| 2520 | else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { | 2521 | else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { |
| 2521 | if (isHMDMode()) { | 2522 | if (isHMDMode()) { |
| 2522 | auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); | 2523 | |
| 2523 | _myCamera.setOrientation(glm::normalize(glmExtractRotation(hmdWorldMat))); | 2524 | if (!_thirdPersonHMDCameraBoomValid) { |
| 2524 | _myCamera.setPosition(extractTranslation(hmdWorldMat) + | 2525 | const glm::vec3 CAMERA_OFFSET = glm::vec3(0.0f, 0.0f, 0.7f); |
| 2525 | myAvatar->getWorldOrientation() * boomOffset); | 2526 | _thirdPersonHMDCameraBoom = cancelOutRollAndPitch(myAvatar->getHMDSensorOrientation()) * CAMERA_OFFSET; |
| 2527 | _thirdPersonHMDCameraBoomValid = true; | ||
| 2528 | } | ||
| 2529 | |||
| 2530 | glm::mat4 thirdPersonCameraSensorToWorldMatrix = myAvatar->getSensorToWorldMatrix(); | ||
| 2531 | |||
| 2532 | const glm::vec3 cameraPos = myAvatar->getHMDSensorPosition() + _thirdPersonHMDCameraBoom * myAvatar->getBoomLength(); | ||
| 2533 | glm::mat4 sensorCameraMat = createMatFromQuatAndPos(myAvatar->getHMDSensorOrientation(), cameraPos); | ||
| 2534 | glm::mat4 worldCameraMat = thirdPersonCameraSensorToWorldMatrix * sensorCameraMat; | ||
| 2535 | |||
| 2536 | _myCamera.setOrientation(glm::normalize(glmExtractRotation(worldCameraMat))); | ||
| 2537 | _myCamera.setPosition(extractTranslation(worldCameraMat)); | ||
| 2526 | } | 2538 | } |
| 2527 | else { | 2539 | else { |
| 2540 | _thirdPersonHMDCameraBoomValid = false; | ||
| 2541 | |||
| 2528 | _myCamera.setOrientation(myAvatar->getHead()->getOrientation()); | 2542 | _myCamera.setOrientation(myAvatar->getHead()->getOrientation()); |
| 2529 | if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { | 2543 | if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { |
| 2530 | _myCamera.setPosition(myAvatar->getDefaultEyePosition() | 2544 | _myCamera.setPosition(myAvatar->getDefaultEyePosition() |
| @@ -2537,6 +2551,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 6 unmodified lines | |||
| 2537 | } | 2551 | } |
| 2538 | } | 2552 | } |
| 2539 | else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { | 2553 | else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { |
| 2554 | _thirdPersonHMDCameraBoomValid= false; | ||
| 2540 | if (isHMDMode()) { | 2555 | if (isHMDMode()) { |
| 2541 | auto mirrorBodyOrientation = myAvatar->getWorldOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)); | 2556 | auto mirrorBodyOrientation = myAvatar->getWorldOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)); |
| 2542 | 2557 | ||
| @@ -2571,6 +2586,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 28 unmodified lines | |||
| 2571 | renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE; | 2586 | renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE; |
| 2572 | } | 2587 | } |
| 2573 | else if (_myCamera.getMode() == CAMERA_MODE_ENTITY) { | 2588 | else if (_myCamera.getMode() == CAMERA_MODE_ENTITY) { |
| 2589 | _thirdPersonHMDCameraBoomValid= false; | ||
| 2574 | EntityItemPointer cameraEntity = _myCamera.getCameraEntityPointer(); | 2590 | EntityItemPointer cameraEntity = _myCamera.getCameraEntityPointer(); |
| 2575 | if (cameraEntity != nullptr) { | 2591 | if (cameraEntity != nullptr) { |
| 2576 | if (isHMDMode()) { | 2592 | if (isHMDMode()) { |
| @@ -5153,7 +5169,8 @@ void Application::update(float deltaTime) { · 2576 unmodified lines | |||
| 5153 | _postUpdateLambdas.clear(); | 5169 | _postUpdateLambdas.clear(); |
| 5154 | } | 5170 | } |
| 5155 | 5171 | ||
| 5156 | editRenderArgs([this](AppRenderArgs& appRenderArgs) { | 5172 | |
| 5173 | editRenderArgs([this, deltaTime](AppRenderArgs& appRenderArgs) { | ||
| 5157 | PerformanceTimer perfTimer("editRenderArgs"); | 5174 | PerformanceTimer perfTimer("editRenderArgs"); |
| 5158 | appRenderArgs._headPose= getHMDSensorPose(); | 5175 | appRenderArgs._headPose= getHMDSensorPose(); |
| 5159 | 5176 | ||
| @@ -5200,7 +5217,7 @@ void Application::update(float deltaTime) { · 40 unmodified lines | |||
| 5200 | resizeGL(); | 5217 | resizeGL(); |
| 5201 | } | 5218 | } |
| 5202 | 5219 | ||
| 5203 | this->updateCamera(appRenderArgs._renderArgs); | 5220 | this->updateCamera(appRenderArgs._renderArgs, deltaTime); |
| 5204 | appRenderArgs._eyeToWorld = _myCamera.getTransform(); | 5221 | appRenderArgs._eyeToWorld = _myCamera.getTransform(); |
| 5205 | appRenderArgs._isStereo = false; | 5222 | appRenderArgs._isStereo = false; |
| 5206 | 5223 | ||