2929#include < QTimer>
3030
3131#include " qgsaabb.h"
32+ #include " qgsabstract3dengine.h"
3233#include " qgs3dmapsettings.h"
3334#include " qgs3dutils.h"
3435#include " qgsabstract3drenderer.h"
4142#include " qgsvectorlayer3drenderer.h"
4243
4344
44- Qgs3DMapScene::Qgs3DMapScene ( const Qgs3DMapSettings &map, Qt3DExtras::QForwardRenderer *defaultFrameGraph, Qt3DRender::QRenderSettings *renderSettings, Qt3DRender::QCamera *camera, const QRect &viewportRect, Qt3DCore::QNode *parent )
45- : Qt3DCore::QEntity( parent )
45+ Qgs3DMapScene::Qgs3DMapScene ( const Qgs3DMapSettings &map, QgsAbstract3DEngine *engine )
46+ : Qt3DCore::QEntity()
4647 , mMap( map )
47- , mForwardRenderer( defaultFrameGraph )
48+ , mEngine( engine )
4849{
4950
5051 connect ( &map, &Qgs3DMapSettings::backgroundColorChanged, this , &Qgs3DMapScene::onBackgroundColorChanged );
5152 onBackgroundColorChanged ();
5253
5354 // TODO: strange - setting OnDemand render policy still keeps QGIS busy (Qt 5.9.0)
5455 // actually it is more busy than with the default "Always" policy although there are no changes in the scene.
55- // renderSettings->setRenderPolicy( Qt3DRender::QRenderSettings::OnDemand );
56+ // mRenderer-> renderSettings() ->setRenderPolicy( Qt3DRender::QRenderSettings::OnDemand );
5657
5758#if QT_VERSION >= 0x050900
5859 // we want precise picking of terrain (also bounding volume picking does not seem to work - not sure why)
59- renderSettings->pickingSettings ()->setPickMethod ( Qt3DRender::QPickingSettings::TrianglePicking );
60+ mEngine -> renderSettings () ->pickingSettings ()->setPickMethod ( Qt3DRender::QPickingSettings::TrianglePicking );
6061#endif
6162
63+ QRect viewportRect ( QPoint ( 0 , 0 ), mEngine ->size () );
64+
6265 // Camera
6366 float aspectRatio = ( float )viewportRect.width () / viewportRect.height ();
64- camera->lens ()->setPerspectiveProjection ( 45 .0f , aspectRatio, 10 .f , 10000 .0f );
67+ mEngine -> camera () ->lens ()->setPerspectiveProjection ( 45 .0f , aspectRatio, 10 .f , 10000 .0f );
6568
6669 mFrameAction = new Qt3DLogic::QFrameAction ();
6770 connect ( mFrameAction , &Qt3DLogic::QFrameAction::triggered,
@@ -71,10 +74,10 @@ Qgs3DMapScene::Qgs3DMapScene( const Qgs3DMapSettings &map, Qt3DExtras::QForwardR
7174 // Camera controlling
7275 mCameraController = new QgsCameraController ( this ); // attaches to the scene
7376 mCameraController ->setViewport ( viewportRect );
74- mCameraController ->setCamera ( camera );
77+ mCameraController ->setCamera ( mEngine -> camera () );
7578 mCameraController ->resetView ( 1000 );
7679
77- addCameraViewCenterEntity ( camera );
80+ addCameraViewCenterEntity ( mEngine -> camera () );
7881
7982 // create terrain entity
8083
@@ -156,7 +159,7 @@ Qgs3DMapScene::Qgs3DMapScene( const Qgs3DMapSettings &map, Qt3DExtras::QForwardR
156159 // docs say frustum culling must be disabled for skybox.
157160 // it _somehow_ works even when frustum culling is enabled with some camera positions,
158161 // but then when zoomed in more it would disappear - so let's keep frustum culling disabled
159- defaultFrameGraph ->setFrustumCullingEnabled ( false );
162+ mEngine ->setFrustumCullingEnabled ( false );
160163 }
161164
162165 // force initial update of chunked entities
@@ -333,7 +336,7 @@ void Qgs3DMapScene::createTerrainDeferred()
333336
334337void Qgs3DMapScene::onBackgroundColorChanged ()
335338{
336- mForwardRenderer ->setClearColor ( mMap .backgroundColor () );
339+ mEngine ->setClearColor ( mMap .backgroundColor () );
337340}
338341
339342void Qgs3DMapScene::onLayerRenderer3DChanged ()
0 commit comments