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
2475 finalFramebuffer = framebufferCache->getFramebuffer();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 mat4 eyeProjections[2];2485 mat4 eyeProjections[2];
2479 {2486 {
2480 PROFILE_RANGE(render, "/mainRender");2487 PROFILE_RANGE(render, "/mainRender");
@@ -2499,13 +2506,6 @@ void Application::paintGL() { · 18 unmodified lines
2499 mat4 eyeOffsets[2];2506 mat4 eyeOffsets[2];
2500 mat4 eyeProjections[2];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 // adjust near clip plane by heightRatio2509 // adjust near clip plane by heightRatio
2510 auto baseProjection = glm::perspective(renderArgs.getViewFrustum().getFieldOfView(),2510 auto baseProjection = glm::perspective(renderArgs.getViewFrustum().getFieldOfView(),
2511 renderArgs.getViewFrustum().getAspectRatio(),2511 renderArgs.getViewFrustum().getAspectRatio(),
@@ -2524,7 +2524,7 @@ void Application::paintGL() { · 12 unmodified lines
2524 // Grab the translation2524 // Grab the translation
2525 vec3 eyeOffset = glm::vec3(eyeToHead[3]);2525 vec3 eyeOffset = glm::vec3(eyeToHead[3]);
2526 // Apply IPD scaling2526 // Apply IPD scaling
2527 mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * IPDScale);2527 mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * ipdScale);
2528 eyeOffsets[eye] = eyeOffsetTransform;2528 eyeOffsets[eye] = eyeOffsetTransform;
2529 eyeProjections[eye] = displayPlugin->getEyeProjection(eye, baseProjection);2529 eyeProjections[eye] = displayPlugin->getEyeProjection(eye, baseProjection);
2530 });2530 });
@@ -2544,8 +2544,14 @@ void Application::paintGL() { · 13 unmodified lines
2544 PerformanceTimer perfTimer("postComposite");2544 PerformanceTimer perfTimer("postComposite");
2545 renderArgs._batch = &postCompositeBatch;2545 renderArgs._batch = &postCompositeBatch;
2546 renderArgs._batch->setViewportTransform(ivec4(0, 0, finalFramebufferSize.width(), finalFramebufferSize.height()));2546 renderArgs._batch->setViewportTransform(ivec4(0, 0, finalFramebufferSize.width(), finalFramebufferSize.height()));
2547 renderArgs._batch->setViewTransform(renderArgs.getViewFrustum().getView());
2548 for_each_eye([&](Eye eye) {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 renderArgs._batch->setProjectionTransform(eyeProjections[eye]);2555 renderArgs._batch->setProjectionTransform(eyeProjections[eye]);
2550 _overlays.render3DHUDOverlays(&renderArgs);2556 _overlays.render3DHUDOverlays(&renderArgs);
2551 });2557 });