17#include "moc_qgsframegraph.cpp"
29#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
30#include <Qt3DRender/QAttribute>
31#include <Qt3DRender/QBuffer>
32#include <Qt3DRender/QGeometry>
38#include <Qt3DCore/QAttribute>
39#include <Qt3DCore/QBuffer>
40#include <Qt3DCore/QGeometry>
47#include <Qt3DRender/QGeometryRenderer>
48#include <Qt3DRender/QTechnique>
49#include <Qt3DRender/QGraphicsApiFilter>
50#include <Qt3DRender/QBlendEquation>
51#include <Qt3DRender/QColorMask>
52#include <Qt3DRender/QSortPolicy>
53#include <Qt3DRender/QNoDepthMask>
54#include <Qt3DRender/QBlendEquationArguments>
55#include <Qt3DRender/QAbstractTexture>
56#include <Qt3DRender/QNoDraw>
67void QgsFrameGraph::constructForwardRenderPass()
72void QgsFrameGraph::constructShadowRenderPass()
77Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructSubPostPassForTexturesPreview()
79 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter;
80 layerFilter->setObjectName(
"Sub pass TexturesPreview" );
81 layerFilter->addLayer( mPreviewLayer );
83 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet( layerFilter );
84 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
85 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
86 renderStateSet->addRenderState( depthTest );
87 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
88 cullFace->setMode( Qt3DRender::QCullFace::NoCulling );
89 renderStateSet->addRenderState( cullFace );
94Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructSubPostPassForProcessing()
96 Qt3DRender::QCameraSelector *cameraSelector =
new Qt3DRender::QCameraSelector;
97 cameraSelector->setObjectName(
"Sub pass Postprocessing" );
100 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter( cameraSelector );
103 new Qt3DRender::QClearBuffers( layerFilter );
105 Qt3DRender::QLayer *postProcessingLayer =
new Qt3DRender::QLayer();
107 layerFilter->addLayer( postProcessingLayer );
108 mPostprocessingEntity->setObjectName(
"PostProcessingPassEntity" );
110 return cameraSelector;
113Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructSubPostPassForRenderCapture()
115 Qt3DRender::QFrameGraphNode *top =
new Qt3DRender::QNoDraw;
116 top->setObjectName(
"Sub pass RenderCapture" );
118 mRenderCapture =
new Qt3DRender::QRenderCapture( top );
123Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructPostprocessingPass()
125 mRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector;
126 mRenderCaptureTargetSelector->setObjectName(
"Postprocessing render pass" );
127 mRenderCaptureTargetSelector->setEnabled( mRenderCaptureEnabled );
129 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget( mRenderCaptureTargetSelector );
135 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( renderTarget );
136 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
139 mRenderCaptureColorTexture =
new Qt3DRender::QTexture2D( colorOutput );
140 mRenderCaptureColorTexture->setSize( mSize.width(), mSize.height() );
141 mRenderCaptureColorTexture->setFormat( Qt3DRender::QAbstractTexture::RGB8_UNorm );
142 mRenderCaptureColorTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
143 mRenderCaptureColorTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
144 mRenderCaptureColorTexture->setObjectName(
"PostProcessingPass::ColorTarget" );
147 colorOutput->setTexture( mRenderCaptureColorTexture );
148 renderTarget->addOutput( colorOutput );
150 Qt3DRender::QRenderTargetOutput *depthOutput =
new Qt3DRender::QRenderTargetOutput( renderTarget );
152 depthOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
153 mRenderCaptureDepthTexture =
new Qt3DRender::QTexture2D( depthOutput );
154 mRenderCaptureDepthTexture->setSize( mSize.width(), mSize.height() );
155 mRenderCaptureDepthTexture->setFormat( Qt3DRender::QAbstractTexture::DepthFormat );
156 mRenderCaptureDepthTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
157 mRenderCaptureDepthTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
158 mRenderCaptureDepthTexture->setComparisonFunction( Qt3DRender::QAbstractTexture::CompareLessEqual );
159 mRenderCaptureDepthTexture->setComparisonMode( Qt3DRender::QAbstractTexture::CompareRefToTexture );
160 mRenderCaptureDepthTexture->setObjectName(
"PostProcessingPass::DepthTarget" );
162 depthOutput->setTexture( mRenderCaptureDepthTexture );
163 renderTarget->addOutput( depthOutput );
165 mRenderCaptureTargetSelector->setTarget( renderTarget );
168 constructSubPostPassForProcessing()->setParent( mRenderCaptureTargetSelector );
169 constructSubPostPassForTexturesPreview()->setParent( mRenderCaptureTargetSelector );
170 constructSubPostPassForRenderCapture()->setParent( mRenderCaptureTargetSelector );
172 return mRenderCaptureTargetSelector;
175Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructAmbientOcclusionRenderPass()
177 mAmbientOcclusionRenderCameraSelector =
new Qt3DRender::QCameraSelector;
178 mAmbientOcclusionRenderCameraSelector->setObjectName(
"AmbientOcclusion render pass CameraSelector" );
179 mAmbientOcclusionRenderCameraSelector->setCamera( mMainCamera );
181 mAmbientOcclusionRenderStateSet =
new Qt3DRender::QRenderStateSet( mAmbientOcclusionRenderCameraSelector );
183 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
184 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
186 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
187 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
189 mAmbientOcclusionRenderStateSet->addRenderState( depthRenderDepthTest );
190 mAmbientOcclusionRenderStateSet->addRenderState( depthRenderCullFace );
192 mAmbientOcclusionRenderLayerFilter =
new Qt3DRender::QLayerFilter( mAmbientOcclusionRenderStateSet );
194 mAmbientOcclusionRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector( mAmbientOcclusionRenderLayerFilter );
195 Qt3DRender::QRenderTarget *colorRenderTarget =
new Qt3DRender::QRenderTarget( mAmbientOcclusionRenderCaptureTargetSelector );
201 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( colorRenderTarget );
202 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
205 mAmbientOcclusionRenderTexture =
new Qt3DRender::QTexture2D( colorOutput );
206 mAmbientOcclusionRenderTexture->setSize( mSize.width(), mSize.height() );
207 mAmbientOcclusionRenderTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
208 mAmbientOcclusionRenderTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
209 mAmbientOcclusionRenderTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
212 colorOutput->setTexture( mAmbientOcclusionRenderTexture );
213 colorRenderTarget->addOutput( colorOutput );
215 mAmbientOcclusionRenderCaptureTargetSelector->setTarget( colorRenderTarget );
217 Qt3DRender::QLayer *ambientOcclusionRenderLayer =
new Qt3DRender::QLayer();
220 mAmbientOcclusionRenderLayerFilter->addLayer( ambientOcclusionRenderLayer );
222 return mAmbientOcclusionRenderCameraSelector;
225Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructAmbientOcclusionBlurPass()
227 mAmbientOcclusionBlurCameraSelector =
new Qt3DRender::QCameraSelector;
228 mAmbientOcclusionBlurCameraSelector->setObjectName(
"AmbientOcclusion blur pass CameraSelector" );
229 mAmbientOcclusionBlurCameraSelector->setCamera( mMainCamera );
231 mAmbientOcclusionBlurStateSet =
new Qt3DRender::QRenderStateSet( mAmbientOcclusionBlurCameraSelector );
233 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
234 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
236 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
237 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
239 mAmbientOcclusionBlurStateSet->addRenderState( depthRenderDepthTest );
240 mAmbientOcclusionBlurStateSet->addRenderState( depthRenderCullFace );
242 mAmbientOcclusionBlurLayerFilter =
new Qt3DRender::QLayerFilter( mAmbientOcclusionBlurStateSet );
244 mAmbientOcclusionBlurRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector( mAmbientOcclusionBlurLayerFilter );
245 Qt3DRender::QRenderTarget *depthRenderTarget =
new Qt3DRender::QRenderTarget( mAmbientOcclusionBlurRenderCaptureTargetSelector );
251 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( depthRenderTarget );
252 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
255 mAmbientOcclusionBlurTexture =
new Qt3DRender::QTexture2D( colorOutput );
256 mAmbientOcclusionBlurTexture->setSize( mSize.width(), mSize.height() );
257 mAmbientOcclusionBlurTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
258 mAmbientOcclusionBlurTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
259 mAmbientOcclusionBlurTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
262 colorOutput->setTexture( mAmbientOcclusionBlurTexture );
263 depthRenderTarget->addOutput( colorOutput );
265 mAmbientOcclusionBlurRenderCaptureTargetSelector->setTarget( depthRenderTarget );
267 Qt3DRender::QLayer *ambientOcclusionBlurLayer =
new Qt3DRender::QLayer();
269 mAmbientOcclusionBlurLayerFilter->addLayer( ambientOcclusionBlurLayer );
271 return mAmbientOcclusionBlurCameraSelector;
275Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructRubberBandsPass()
277 mRubberBandsCameraSelector =
new Qt3DRender::QCameraSelector;
278 mRubberBandsCameraSelector->setObjectName(
"RubberBands Pass CameraSelector" );
279 mRubberBandsCameraSelector->setCamera( mMainCamera );
281 mRubberBandsLayerFilter =
new Qt3DRender::QLayerFilter( mRubberBandsCameraSelector );
282 mRubberBandsLayerFilter->addLayer( mRubberBandsLayer );
284 Qt3DRender::QBlendEquationArguments *blendState =
new Qt3DRender::QBlendEquationArguments;
285 blendState->setSourceRgb( Qt3DRender::QBlendEquationArguments::SourceAlpha );
286 blendState->setDestinationRgb( Qt3DRender::QBlendEquationArguments::OneMinusSourceAlpha );
288 Qt3DRender::QBlendEquation *blendEquation =
new Qt3DRender::QBlendEquation;
289 blendEquation->setBlendFunction( Qt3DRender::QBlendEquation::Add );
291 mRubberBandsStateSet =
new Qt3DRender::QRenderStateSet( mRubberBandsLayerFilter );
292 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
293 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
294 mRubberBandsStateSet->addRenderState( depthTest );
295 mRubberBandsStateSet->addRenderState( blendState );
296 mRubberBandsStateSet->addRenderState( blendEquation );
301 mRubberBandsRenderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mRubberBandsStateSet );
302 mRubberBandsRenderTargetSelector->setTarget(
forwardRenderView().renderTargetSelector()->target() );
304 return mRubberBandsCameraSelector;
308void QgsFrameGraph::constructDepthRenderPass()
356 mPreviewLayer =
new Qt3DRender::QLayer;
357 mRubberBandsLayer =
new Qt3DRender::QLayer;
359 mRubberBandsLayer->setObjectName(
"mRubberBandsLayer" );
361 mPreviewLayer->setRecursive(
true );
362 mRubberBandsLayer->setRecursive(
true );
364 mRenderSurfaceSelector =
new Qt3DRender::QRenderSurfaceSelector;
366 QObject *surfaceObj =
dynamic_cast<QObject *
>( surface );
367 Q_ASSERT( surfaceObj );
369 mRenderSurfaceSelector->setSurface( surfaceObj );
370 mRenderSurfaceSelector->setExternalRenderTargetSize( mSize );
372 mMainViewPort =
new Qt3DRender::QViewport( mRenderSurfaceSelector );
373 mMainViewPort->setNormalizedRect( QRectF( 0.0f, 0.0f, 1.0f, 1.0f ) );
376 constructForwardRenderPass();
379 Qt3DRender::QFrameGraphNode *rubberBandsPass = constructRubberBandsPass();
380 rubberBandsPass->setObjectName(
"rubberBandsPass" );
381 rubberBandsPass->setParent( mMainViewPort );
384 constructShadowRenderPass();
387 constructDepthRenderPass();
390 Qt3DRender::QFrameGraphNode *ambientOcclusionFactorRender = constructAmbientOcclusionRenderPass();
391 ambientOcclusionFactorRender->setParent( mMainViewPort );
393 Qt3DRender::QFrameGraphNode *ambientOcclusionBlurPass = constructAmbientOcclusionBlurPass();
394 ambientOcclusionBlurPass->setParent( mMainViewPort );
397 Qt3DRender::QFrameGraphNode *postprocessingPass = constructPostprocessingPass();
398 postprocessingPass->setParent( mMainViewPort );
399 postprocessingPass->setObjectName(
"PostProcessingPass" );
401 mRubberBandsRootEntity =
new Qt3DCore::QEntity( mRootEntity );
402 mRubberBandsRootEntity->setObjectName(
"mRubberBandsRootEntity" );
403 mRubberBandsRootEntity->addComponent( mRubberBandsLayer );
405 Qt3DRender::QParameter *depthMapIsDepthParam =
new Qt3DRender::QParameter(
"isDepth",
true );
406 Qt3DRender::QParameter *shadowMapIsDepthParam =
new Qt3DRender::QParameter(
"isDepth",
true );
409 mDebugDepthMapPreviewQuad = this->
addTexturePreviewOverlay( forwardDepthTexture, QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ), QVector<Qt3DRender::QParameter *> { depthMapIsDepthParam } );
412 mDebugShadowMapPreviewQuad = this->
addTexturePreviewOverlay( shadowMapTexture, QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ), QVector<Qt3DRender::QParameter *> { shadowMapIsDepthParam } );
414 mDebugDepthMapPreviewQuad->setEnabled(
false );
415 mDebugShadowMapPreviewQuad->setEnabled(
false );
420 if ( mRenderViewMap.find( name ) != mRenderViewMap.end() )
422 mRenderViewMap[name]->topGraphNode()->setParent( ( QNode * )
nullptr );
423 mRenderViewMap.erase( name );
430 if ( mRenderViewMap.find( name ) == mRenderViewMap.end() )
432 mRenderViewMap[name] = std::move(
renderView );
433 mRenderViewMap[name]->topGraphNode()->setParent( mMainViewPort );
434 mRenderViewMap[name]->updateWindowResize( mSize.width(), mSize.height() );
445 if ( mRenderViewMap[name] )
447 mRenderViewMap[name]->setEnabled( enable );
453 if ( mRenderViewMap.find( name ) != mRenderViewMap.end() )
455 return mRenderViewMap[name].get();
462 return mRenderViewMap[name] !=
nullptr && mRenderViewMap[name]->isEnabled();
468 previewQuad->addComponent( mPreviewLayer );
469 previewQuad->setParent( mRootEntity );
470 mPreviewQuads.push_back( previewQuad );
480 for (
int i = 0, dirLight = 0; !light && i < lightSources.size(); i++ )
484 if ( dirLight == selectedLight )
485 light = qgis::down_cast< QgsDirectionalLightSettings * >( lightSources[i] );
508 QObject *top = mRenderSurfaceSelector;
509 while ( top->parent() &&
dynamic_cast<Qt3DRender::QFrameGraphNode *
>( top->parent() ) )
513 context.
lowestId = mMainCamera->id().id();
516 return strList.join(
"\n" ) + QString(
"\n" );
522 return strList.join(
"\n" ) + QString(
"\n" );
532 mAmbientOcclusionEnabled = enabled;
533 mAmbientOcclusionRenderEntity->setEnabled( enabled );
539 mAmbientOcclusionIntensity = intensity;
540 mAmbientOcclusionRenderEntity->
setIntensity( intensity );
545 mAmbientOcclusionRadius = radius;
546 mAmbientOcclusionRenderEntity->
setRadius( radius );
551 mAmbientOcclusionThreshold = threshold;
552 mAmbientOcclusionRenderEntity->
setThreshold( threshold );
562 mEyeDomeLightingEnabled = enabled;
563 mEyeDomeLightingStrength = strength;
564 mEyeDomeLightingDistance = distance;
572 mDebugShadowMapPreviewQuad->setEnabled( enabled );
577 case Qt::Corner::TopRightCorner:
578 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
580 case Qt::Corner::TopLeftCorner:
581 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
583 case Qt::Corner::BottomRightCorner:
584 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
586 case Qt::Corner::BottomLeftCorner:
587 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
595 mDebugDepthMapPreviewQuad->setEnabled( enabled );
601 case Qt::Corner::TopRightCorner:
602 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
604 case Qt::Corner::TopLeftCorner:
605 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
607 case Qt::Corner::BottomRightCorner:
608 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
610 case Qt::Corner::BottomLeftCorner:
611 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
620 for (
auto it = mRenderViewMap.begin(); it != mRenderViewMap.end(); ++it )
626 mRenderCaptureColorTexture->setSize( mSize.width(), mSize.height() );
627 mRenderCaptureDepthTexture->setSize( mSize.width(), mSize.height() );
628 mRenderSurfaceSelector->setExternalRenderTargetSize( mSize );
630 mAmbientOcclusionRenderTexture->setSize( mSize.width(), mSize.height() );
631 mAmbientOcclusionBlurTexture->setSize( mSize.width(), mSize.height() );
636 if ( enabled == mRenderCaptureEnabled )
638 mRenderCaptureEnabled = enabled;
639 mRenderCaptureTargetSelector->setEnabled( mRenderCaptureEnabled );
@ Directional
Directional light source.
Base class for 3D render view.
virtual void updateWindowResize(int width, int height)
Called when 3D window is resized.
An entity that is responsible for blurring the ambient occlusion factor texture.
An entity that is responsible for producing an ambient occlusion factor map.
void setThreshold(float threshold)
Sets the amount of occlusion when the effects starts to kick in.
void setRadius(float radius)
Sets the radius for the ambient occlusion effect.
void setIntensity(float intensity)
Sets the intensity for the ambient occlusion effect.
Container class that holds different objects related to depth rendering.
Qt3DRender::QRenderCapture * renderCapture()
Returns the render capture object used to take an image of the depth buffer of the scene.
Definition of a directional light in a 3D map scene.
Container class that holds different objects related to forward rendering.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
void setDebugOverlayEnabled(bool enabled)
Sets whether debug overlay is enabled.
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
Qt3DRender::QTexture2D * depthTexture() const
Returns forward depth texture.
void addClipPlanes(int nrClipPlanes)
Setups nrClipPlanes clip planes in the forward pass to enable OpenGL clipping.
void removeClipPlanes()
Disables OpenGL clipping.
static QStringList dumpFrameGraph(const Qt3DCore::QNode *node, FgDumpContext context)
Returns a tree view of the frame graph starting from node. The object ids will be given relatively to...
static QStringList dumpSceneGraph(const Qt3DCore::QNode *node, FgDumpContext context)
Returns a tree view of the scene graph starting from node. The object ids will be given relatively to...
bool isRenderViewEnabled(const QString &name)
Returns true if the render view named name is found and enabled.
void setRenderViewEnabled(const QString &name, bool enable)
Enables or disables the render view named name according to enable.
void updateShadowSettings(const QgsShadowSettings &shadowSettings, const QList< QgsLightSource * > &lightSources)
Updates shadow bias, light and texture size according to shadowSettings and lightSources.
void addClipPlanes(int nrClipPlanes)
Setups nrClipPlanes clip planes in the forward pass to enable OpenGL clipping.
void unregisterRenderView(const QString &name)
Unregisters the render view named name, if any.
QString dumpFrameGraph() const
Dumps frame graph as string.
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
Qt3DRender::QRenderCapture * depthRenderCapture()
Returns the render capture object used to take an image of the depth buffer of the scene.
QgsAbstractRenderView * renderView(const QString &name)
Returns the render view named name, if any.
void removeClipPlanes()
Disables OpenGL clipping.
bool registerRenderView(std::unique_ptr< QgsAbstractRenderView > renderView, const QString &name)
Registers a new the render view renderView with name name.
void setupShadowMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the shadow map debugging view port.
QgsDepthRenderView & depthRenderView()
Returns depth renderview.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
QgsPreviewQuad * addTexturePreviewOverlay(Qt3DRender::QTexture2D *texture, const QPointF ¢erNDC, const QSizeF &size, QVector< Qt3DRender::QParameter * > additionalShaderParameters=QVector< Qt3DRender::QParameter * >())
Adds an preview entity that shows a texture in real time for debugging purposes.
void setAmbientOcclusionIntensity(float intensity)
Sets the ambient occlusion intensity.
static const QString FORWARD_RENDERVIEW
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
static const QString SHADOW_RENDERVIEW
void setDebugOverlayEnabled(bool enabled)
Sets whether debug overlay is enabled.
void setupDepthMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the depth map debugging view port.
static const QString AXIS3D_RENDERVIEW
QgsForwardRenderView & forwardRenderView()
Returns forward renderview.
void setAmbientOcclusionThreshold(float threshold)
Sets the ambient occlusion threshold.
QString dumpSceneGraph() const
Dumps scene graph as string.
QgsShadowRenderView & shadowRenderView()
Returns shadow renderview.
void setupEyeDomeLighting(bool enabled, double strength, int distance)
Sets eye dome lighting shading related settings.
void setSize(QSize s)
Sets the size of the buffers used for rendering.
void setAmbientOcclusionEnabled(bool enabled)
Sets whether Screen Space Ambient Occlusion will be enabled.
static const QString DEPTH_RENDERVIEW
void setAmbientOcclusionRadius(float radius)
Sets the ambient occlusion radius.
Qt3DRender::QCamera * mainCamera()
Returns the main camera.
QgsFrameGraph(QSurface *surface, QSize s, Qt3DRender::QCamera *mainCamera, Qt3DCore::QEntity *root)
Constructor.
An entity that is responsible for applying post processing effects.
void setAmbientOcclusionEnabled(bool enabled)
Sets whether screen space ambient occlusion is enabled.
void setShadowRenderingEnabled(bool enabled)
Sets whether shadow rendering is enabled.
void updateShadowSettings(const QgsDirectionalLightSettings &light, float maximumShadowRenderingDistance)
Sets shadow rendering to use a directional light.
void setEyeDomeLightingDistance(int distance)
Sets the eye dome lighting distance (contributes to the contrast of the image)
void setShadowBias(float shadowBias)
Sets the shadow bias value.
void setEyeDomeLightingStrength(double strength)
Sets the eye dome lighting strength.
void setEyeDomeLightingEnabled(bool enabled)
Sets whether eye dome lighting is enabled.
Rectangular quad entity used for debugging depth maps.
void setViewPort(const QPointF ¢erNDC, const QSizeF &size)
Sets where the quad will be located on the scene.
Container class that holds different objects related to shadow rendering.
void setMapSize(int width, int height)
Update shadow depth texture size.
virtual void setEnabled(bool enable) override
Enable or disable via enable the renderview sub tree.
Qt3DRender::QTexture2D * mapTexture() const
Returns shadow depth texture.
Contains configuration for rendering shadows.
int selectedDirectionalLight() const
Returns the selected direcctional light used to cast shadows.
bool renderShadows() const
Returns whether shadow rendering is enabled.
int shadowMapResolution() const
Returns the resolution of the shadow map texture used to generate the shadows.
double maximumShadowRenderingDistance() const
Returns the maximum shadow rendering distance accounted for when rendering shadows Objects further aw...
double shadowBias() const
Returns the shadow bias used to correct the numerical imprecision of shadows (for the depth test) Thi...
Qt3DCore::QAttribute Qt3DQAttribute
Qt3DCore::QBuffer Qt3DQBuffer
Qt3DCore::QGeometry Qt3DQGeometry