Showing the changes to interface/src/Application.cpp (1 of 3 files). Show all
Unified · Split
| @@ -2475,6 +2475,13 @@ void Application::paintGL() { · 2474 unmodified lines | ||
| 2475 | 2475 | finalFramebuffer = framebufferCache->getFramebuffer(); |
| 2476 | 2476 | } |
| 2477 | 2477 | |
| 2478 | + auto hmdInterface = DependencyManager::get<HMDScriptingInterface>(); | |
| 2479 | + float ipdScale = hmdInterface->getIPDScale(); | |
| 2480 | + | |
| 2481 | + // scale IPD by height ratio, to make the world seem larger or smaller accordingly. | |
| 2482 | + float heightRatio = getMyAvatar()->getEyeHeight() / getMyAvatar()->getUserEyeHeight(); | |
| 2483 | + ipdScale *= heightRatio; | |
| 2484 | + | |
| 2478 | 2485 | mat4 eyeProjections[2]; |
| 2479 | 2486 | { |
| 2480 | 2487 | PROFILE_RANGE(render, "/mainRender"); |
| @@ -2499,13 +2506,6 @@ void Application::paintGL() { · 18 unmodified lines | ||
| 2499 | 2506 | mat4 eyeOffsets[2]; |
| 2500 | 2507 | mat4 eyeProjections[2]; |
| 2501 | 2508 | |
| 2502 | − auto hmdInterface = DependencyManager::get<HMDScriptingInterface>(); | |
| 2503 | − float IPDScale = hmdInterface->getIPDScale(); | |
| 2504 | − | |
| 2505 | − // scale IPD by height ratio, to make the world seem larger or smaller accordingly. | |
| 2506 | − float heightRatio = getMyAvatar()->getEyeHeight() / getMyAvatar()->getUserEyeHeight(); | |
| 2507 | − IPDScale *= heightRatio; | |
| 2508 | − | |
| 2509 | 2509 | // adjust near clip plane by heightRatio |
| 2510 | 2510 | auto baseProjection = glm::perspective(renderArgs.getViewFrustum().getFieldOfView(), |
| 2511 | 2511 | renderArgs.getViewFrustum().getAspectRatio(), |
| @@ -2524,7 +2524,7 @@ void Application::paintGL() { · 12 unmodified lines | ||
| 2524 | 2524 | // Grab the translation |
| 2525 | 2525 | vec3 eyeOffset = glm::vec3(eyeToHead[3]); |
| 2526 | 2526 | // Apply IPD scaling |
| 2527 | − mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * IPDScale); | |
| 2527 | + mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * ipdScale); | |
| 2528 | 2528 | eyeOffsets[eye] = eyeOffsetTransform; |
| 2529 | 2529 | eyeProjections[eye] = displayPlugin->getEyeProjection(eye, baseProjection); |
| 2530 | 2530 | }); |
| @@ -2544,8 +2544,14 @@ void Application::paintGL() { · 13 unmodified lines | ||
| 2544 | 2544 | PerformanceTimer perfTimer("postComposite"); |
| 2545 | 2545 | renderArgs._batch = &postCompositeBatch; |
| 2546 | 2546 | renderArgs._batch->setViewportTransform(ivec4(0, 0, finalFramebufferSize.width(), finalFramebufferSize.height())); |
| 2547 | − renderArgs._batch->setViewTransform(renderArgs.getViewFrustum().getView()); | |
| 2548 | 2547 | for_each_eye([&](Eye eye) { |
| 2548 | + | |
| 2549 | + // apply eye offset and IPD scale to the view matrix | |
| 2550 | + mat4 eyeToHead = displayPlugin->getEyeToHeadTransform(eye); | |
| 2551 | + vec3 eyeOffset = glm::vec3(eyeToHead[3]); | |
| 2552 | + mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * ipdScale); | |
| 2553 | + renderArgs._batch->setViewTransform(renderArgs.getViewFrustum().getView() * eyeOffsetTransform); | |
| 2554 | + | |
| 2549 | 2555 | renderArgs._batch->setProjectionTransform(eyeProjections[eye]); |
| 2550 | 2556 | _overlays.render3DHUDOverlays(&renderArgs); |
| 2551 | 2557 | }); |