From aa1455e23ac90a2aff94fe64b319e29051ede325 Mon Sep 17 00:00:00 2001 From: Bernhard Kerbl <kerbl@icg.tugraz.at> Date: Sat, 8 Jul 2023 17:34:47 +0200 Subject: [PATCH] Trackball for point clouds fixed --- src/core/view/InteractiveCameraHandler.cpp | 15 +++++++++++++++ .../gaussianviewer/apps/gaussianViewer/main.cpp | 2 +- .../remote/apps/remoteGaussianUI/main.cpp | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/core/view/InteractiveCameraHandler.cpp b/src/core/view/InteractiveCameraHandler.cpp index bf81d015..dbb3cca1 100755 --- a/src/core/view/InteractiveCameraHandler.cpp +++ b/src/core/view/InteractiveCameraHandler.cpp @@ -92,6 +92,7 @@ namespace sibr { { _raycaster = raycaster; _viewport = viewport; + _radius = areaOfInterest.diagonal().norm(); // Use the trackball to compute an initial camera. _trackball.fromBoundingBox(areaOfInterest, viewport); fromCamera(_trackball.getCamera(), false); @@ -104,6 +105,20 @@ namespace sibr { setupInterpolationPath(cams); } // Update the near and far planes. + + sibr::Vector3f center(0, 0, 0); + for (const auto& cam : cams) { + center += cam->transform().position(); + } + center /= cams.size(); + + float avgDist = 0; + for (const auto& cam : cams) { + avgDist += (cam->transform().position() - center).norm(); + } + avgDist /= cams.size(); + _radius = avgDist; + sibr::InputCamera idealCam = *cams[0]; if(clippingPlanes[0] < 0.0f || clippingPlanes[1] < 0.0f) { float zFar = -1.0f, zNear = -1.0f; diff --git a/src/projects/gaussianviewer/apps/gaussianViewer/main.cpp b/src/projects/gaussianviewer/apps/gaussianViewer/main.cpp index 75cf3041..9e8b9116 100644 --- a/src/projects/gaussianviewer/apps/gaussianViewer/main.cpp +++ b/src/projects/gaussianviewer/apps/gaussianViewer/main.cpp @@ -177,7 +177,7 @@ int main(int ac, char** av) // Camera handler for main view. sibr::InteractiveCameraHandler::Ptr generalCamera(new InteractiveCameraHandler()); - generalCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), raycaster); + generalCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), nullptr); // Add views to mvm. MultiViewManager multiViewManager(window, false); diff --git a/src/projects/remote/apps/remoteGaussianUI/main.cpp b/src/projects/remote/apps/remoteGaussianUI/main.cpp index b6f74194..1791e3f3 100644 --- a/src/projects/remote/apps/remoteGaussianUI/main.cpp +++ b/src/projects/remote/apps/remoteGaussianUI/main.cpp @@ -94,7 +94,7 @@ void resetScene(RemoteAppArgs myArgs, // Camera handler for main view. sibr::InteractiveCameraHandler::Ptr generalCamera(new InteractiveCameraHandler()); - generalCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), raycaster); + generalCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), nullptr); // Top view topView.reset(new sibr::SceneDebugView(scene, generalCamera, myArgs)); -- GitLab