History

Merge remote-tracking branch 'upstream/master' into android

Brad Davis committed 8 years ago

Commit 75794512 parents 22d133c 1a1caa617 files · +882 −68Browse files

Showing the changes to interface/src/Application.cpp (1 of 17 files). Show all

Unified · Split

interface/src/Application.cpp+24−7
@@ -2492,7 +2492,7 @@ void Application::initializeUi() { · 2491 unmodified lines
24922492 offscreenSurfaceCache->reserve(Web3DOverlay::QML, 2);
24932493 }
24942494
2495−void Application::updateCamera(RenderArgs& renderArgs) {
2495+void Application::updateCamera(RenderArgs& renderArgs, float deltaTime) {
24962496 PROFILE_RANGE(render, __FUNCTION__);
24972497 PerformanceTimer perfTimer("updateCamera");
24982498
@@ -2507,6 +2507,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 8 unmodified lines
25072507 // Using the latter will cause the camera to wobble with idle animations,
25082508 // or with changes from the face tracker
25092509 if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) {
2510+ _thirdPersonHMDCameraBoomValid= false;
25102511 if (isHMDMode()) {
25112512 mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
25122513 _myCamera.setPosition(extractTranslation(camMat));
@@ -2519,12 +2520,25 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 6 unmodified lines
25192520 }
25202521 else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) {
25212522 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));
25262538 }
25272539 else {
2540+ _thirdPersonHMDCameraBoomValid = false;
2541+
25282542 _myCamera.setOrientation(myAvatar->getHead()->getOrientation());
25292543 if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) {
25302544 _myCamera.setPosition(myAvatar->getDefaultEyePosition()
@@ -2537,6 +2551,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 6 unmodified lines
25372551 }
25382552 }
25392553 else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {
2554+ _thirdPersonHMDCameraBoomValid= false;
25402555 if (isHMDMode()) {
25412556 auto mirrorBodyOrientation = myAvatar->getWorldOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f));
25422557
@@ -2571,6 +2586,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { · 28 unmodified lines
25712586 renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE;
25722587 }
25732588 else if (_myCamera.getMode() == CAMERA_MODE_ENTITY) {
2589+ _thirdPersonHMDCameraBoomValid= false;
25742590 EntityItemPointer cameraEntity = _myCamera.getCameraEntityPointer();
25752591 if (cameraEntity != nullptr) {
25762592 if (isHMDMode()) {
@@ -5153,7 +5169,8 @@ void Application::update(float deltaTime) { · 2576 unmodified lines
51535169 _postUpdateLambdas.clear();
51545170 }
51555171
5156− editRenderArgs([this](AppRenderArgs& appRenderArgs) {
5172+
5173+ editRenderArgs([this, deltaTime](AppRenderArgs& appRenderArgs) {
51575174 PerformanceTimer perfTimer("editRenderArgs");
51585175 appRenderArgs._headPose= getHMDSensorPose();
51595176
@@ -5200,7 +5217,7 @@ void Application::update(float deltaTime) { · 40 unmodified lines
52005217 resizeGL();
52015218 }
52025219
5203− this->updateCamera(appRenderArgs._renderArgs);
5220+ this->updateCamera(appRenderArgs._renderArgs, deltaTime);
52045221 appRenderArgs._eyeToWorld = _myCamera.getTransform();
52055222 appRenderArgs._isStereo = false;
52065223