diff --git a/src/3d/qgs3dmapscene.cpp b/src/3d/qgs3dmapscene.cpp index 6857dfcbb579..765d23f7b59a 100644 --- a/src/3d/qgs3dmapscene.cpp +++ b/src/3d/qgs3dmapscene.cpp @@ -698,6 +698,8 @@ void Qgs3DMapScene::addLayerEntity( QgsMapLayer *layer ) connect( sceneNewEntity, &Qgs3DMapSceneEntity::newEntityCreated, this, [this]( Qt3DCore::QEntity * entity ) { finalizeNewEntity( entity ); + // this ensures to update the near/far planes with the exact bounding box of the new entity. + updateCameraNearFarPlanes(); } ); connect( sceneNewEntity, &Qgs3DMapSceneEntity::pendingJobsCountChanged, this, &Qgs3DMapScene::totalPendingJobsCountChanged ); diff --git a/src/app/3d/qgs3dmapcanvaswidget.cpp b/src/app/3d/qgs3dmapcanvaswidget.cpp index 3ded0ffc3d72..5991efcef055 100644 --- a/src/app/3d/qgs3dmapcanvaswidget.cpp +++ b/src/app/3d/qgs3dmapcanvaswidget.cpp @@ -393,7 +393,11 @@ void Qgs3DMapCanvasWidget::setMapSettings( Qgs3DMapSettings *map ) connect( mCanvas->scene(), &Qgs3DMapScene::totalPendingJobsCountChanged, this, &Qgs3DMapCanvasWidget::onTotalPendingJobsCountChanged ); connect( mCanvas->scene(), &Qgs3DMapScene::gpuMemoryLimitReached, this, &Qgs3DMapCanvasWidget::onGpuMemoryLimitReached ); - mAnimationWidget->setCameraController( mCanvas->scene()->cameraController() ); + // update the navigation widget when the near/far planes have been updated by the map scene + connect( mCanvas->cameraController()->camera(), &Qt3DRender::QCamera::nearPlaneChanged, mNavigationWidget, &Qgs3DNavigationWidget::updateFromCamera ); + connect( mCanvas->cameraController()->camera(), &Qt3DRender::QCamera::farPlaneChanged, mNavigationWidget, &Qgs3DNavigationWidget::updateFromCamera ); + + mAnimationWidget->setCameraController( mCanvas->cameraController() ); mAnimationWidget->setMap( map ); // Disable button for switching the map theme if the terrain generator is a mesh, or if there is no terrain diff --git a/tests/testdata/control_images/3d/expected_polygon3d_extrusion_data_defined/expected_polygon3d_extrusion_data_defined_mask.png b/tests/testdata/control_images/3d/expected_polygon3d_extrusion_data_defined/expected_polygon3d_extrusion_data_defined_mask.png index 502ffc849dba..409b8a0e3183 100644 Binary files a/tests/testdata/control_images/3d/expected_polygon3d_extrusion_data_defined/expected_polygon3d_extrusion_data_defined_mask.png and b/tests/testdata/control_images/3d/expected_polygon3d_extrusion_data_defined/expected_polygon3d_extrusion_data_defined_mask.png differ diff --git a/tests/testdata/control_images/3d/expected_polygon3d_extrusion_opacity/expected_polygon3d_extrusion_opacity_mask.png b/tests/testdata/control_images/3d/expected_polygon3d_extrusion_opacity/expected_polygon3d_extrusion_opacity_mask.png index 58286686aa92..ff1d53031a90 100644 Binary files a/tests/testdata/control_images/3d/expected_polygon3d_extrusion_opacity/expected_polygon3d_extrusion_opacity_mask.png and b/tests/testdata/control_images/3d/expected_polygon3d_extrusion_opacity/expected_polygon3d_extrusion_opacity_mask.png differ diff --git a/tests/testdata/control_images/3d/expected_rulebased/expected_rulebased_mask.png b/tests/testdata/control_images/3d/expected_rulebased/expected_rulebased_mask.png index 6d973fbf0268..547e64a32f80 100644 Binary files a/tests/testdata/control_images/3d/expected_rulebased/expected_rulebased_mask.png and b/tests/testdata/control_images/3d/expected_rulebased/expected_rulebased_mask.png differ