History

Fix for laser rendering and positioning with sensor scale

Anthony J. Thibault committed 9 years ago

Commit ffdb1061 parent de226293 files · +23 −12Browse files

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

Unified · Split

interface/src/Application.cpp+15−9
@@ -2475,6 +2475,13 @@ void Application::paintGL() { · 2474 unmodified lines
24752475 finalFramebuffer = framebufferCache->getFramebuffer();
24762476 }
24772477
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+
24782485 mat4 eyeProjections[2];
24792486 {
24802487 PROFILE_RANGE(render, "/mainRender");
@@ -2499,13 +2506,6 @@ void Application::paintGL() { · 18 unmodified lines
24992506 mat4 eyeOffsets[2];
25002507 mat4 eyeProjections[2];
25012508
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−
25092509 // adjust near clip plane by heightRatio
25102510 auto baseProjection = glm::perspective(renderArgs.getViewFrustum().getFieldOfView(),
25112511 renderArgs.getViewFrustum().getAspectRatio(),
@@ -2524,7 +2524,7 @@ void Application::paintGL() { · 12 unmodified lines
25242524 // Grab the translation
25252525 vec3 eyeOffset = glm::vec3(eyeToHead[3]);
25262526 // Apply IPD scaling
2527− mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * IPDScale);
2527+ mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * ipdScale);
25282528 eyeOffsets[eye] = eyeOffsetTransform;
25292529 eyeProjections[eye] = displayPlugin->getEyeProjection(eye, baseProjection);
25302530 });
@@ -2544,8 +2544,14 @@ void Application::paintGL() { · 13 unmodified lines
25442544 PerformanceTimer perfTimer("postComposite");
25452545 renderArgs._batch = &postCompositeBatch;
25462546 renderArgs._batch->setViewportTransform(ivec4(0, 0, finalFramebufferSize.width(), finalFramebufferSize.height()));
2547− renderArgs._batch->setViewTransform(renderArgs.getViewFrustum().getView());
25482547 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+
25492555 renderArgs._batch->setProjectionTransform(eyeProjections[eye]);
25502556 _overlays.render3DHUDOverlays(&renderArgs);
25512557 });