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 | 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 | 2496 | PROFILE_RANGE(render, __FUNCTION__); |
| 2497 | 2497 | PerformanceTimer perfTimer("updateCamera"); |
| 2498 | 2498 | |
| @@ -2507,6 +2507,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 8 unmodified lines | ||
| 2507 | 2507 | // Using the latter will cause the camera to wobble with idle animations, |
| 2508 | 2508 | // or with changes from the face tracker |
| 2509 | 2509 | if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { |
| 2510 | + _thirdPersonHMDCameraBoomValid= false; | |
| 2510 | 2511 | if (isHMDMode()) { |
| 2511 | 2512 | mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); |
| 2512 | 2513 | _myCamera.setPosition(extractTranslation(camMat)); |
| @@ -2519,12 +2520,25 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 6 unmodified lines | ||
| 2519 | 2520 | } |
| 2520 | 2521 | else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { |
| 2521 | 2522 | if (isHMDMode()) { |
| 2522 | − auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); | |
| 2523 | − _myCamera.setOrientation(glm::normalize(glmExtractRotation(hmdWorldMat))); | |
| 2524 | − _myCamera.setPosition(extractTranslation(hmdWorldMat) + | |
| 2525 | − myAvatar->getWorldOrientation() * boomOffset); | |
| 2523 | + | |
| 2524 | + if (!_thirdPersonHMDCameraBoomValid) { | |
| 2525 | + const glm::vec3 CAMERA_OFFSET = glm::vec3(0.0f, 0.0f, 0.7f); | |
| 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 | 2539 | else { |
| 2540 | + _thirdPersonHMDCameraBoomValid = false; | |
| 2541 | + | |
| 2528 | 2542 | _myCamera.setOrientation(myAvatar->getHead()->getOrientation()); |
| 2529 | 2543 | if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { |
| 2530 | 2544 | _myCamera.setPosition(myAvatar->getDefaultEyePosition() |
| @@ -2537,6 +2551,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 6 unmodified lines | ||
| 2537 | 2551 | } |
| 2538 | 2552 | } |
| 2539 | 2553 | else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { |
| 2554 | + _thirdPersonHMDCameraBoomValid= false; | |
| 2540 | 2555 | if (isHMDMode()) { |
| 2541 | 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 | 2586 | renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE; |
| 2572 | 2587 | } |
| 2573 | 2588 | else if (_myCamera.getMode() == CAMERA_MODE_ENTITY) { |
| 2589 | + _thirdPersonHMDCameraBoomValid= false; | |
| 2574 | 2590 | EntityItemPointer cameraEntity = _myCamera.getCameraEntityPointer(); |
| 2575 | 2591 | if (cameraEntity != nullptr) { |
| 2576 | 2592 | if (isHMDMode()) { |
| @@ -5153,7 +5169,8 @@ void Application::update(float deltaTime) { · 2576 unmodified lines | ||
| 5153 | 5169 | _postUpdateLambdas.clear(); |
| 5154 | 5170 | } |
| 5155 | 5171 | |
| 5156 | − editRenderArgs([this](AppRenderArgs& appRenderArgs) { | |
| 5172 | + | |
| 5173 | + editRenderArgs([this, deltaTime](AppRenderArgs& appRenderArgs) { | |
| 5157 | 5174 | PerformanceTimer perfTimer("editRenderArgs"); |
| 5158 | 5175 | appRenderArgs._headPose= getHMDSensorPose(); |
| 5159 | 5176 | |
| @@ -5200,7 +5217,7 @@ void Application::update(float deltaTime) { · 40 unmodified lines | ||
| 5200 | 5217 | resizeGL(); |
| 5201 | 5218 | } |
| 5202 | 5219 | |
| 5203 | − this->updateCamera(appRenderArgs._renderArgs); | |
| 5220 | + this->updateCamera(appRenderArgs._renderArgs, deltaTime); | |
| 5204 | 5221 | appRenderArgs._eyeToWorld = _myCamera.getTransform(); |
| 5205 | 5222 | appRenderArgs._isStereo = false; |
| 5206 | 5223 | |