17#include "moc_qgsframegraph.cpp"
25#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
26#include <Qt3DRender/QAttribute>
27#include <Qt3DRender/QBuffer>
28#include <Qt3DRender/QGeometry>
34#include <Qt3DCore/QAttribute>
35#include <Qt3DCore/QBuffer>
36#include <Qt3DCore/QGeometry>
43#include <Qt3DRender/QGeometryRenderer>
44#include <Qt3DRender/QTechnique>
45#include <Qt3DRender/QGraphicsApiFilter>
46#include <Qt3DRender/QBlendEquation>
47#include <Qt3DRender/QColorMask>
48#include <Qt3DRender/QSortPolicy>
49#include <Qt3DRender/QNoDepthMask>
50#include <Qt3DRender/QBlendEquationArguments>
51#include <Qt3DRender/QAbstractTexture>
53#include <Qt3DRender/QNoDraw>
54#include <Qt3DRender/QClipPlane>
56Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructForwardRenderPass()
97 mMainCameraSelector =
new Qt3DRender::QCameraSelector;
98 mMainCameraSelector->setObjectName(
"Forward render pass CameraSelector" );
99 mMainCameraSelector->setCamera( mMainCamera );
101 mForwardRenderLayerFilter =
new Qt3DRender::QLayerFilter( mMainCameraSelector );
102 mForwardRenderLayerFilter->addLayer( mForwardRenderLayer );
104 mClipRenderStateSet =
new Qt3DRender::QRenderStateSet( mForwardRenderLayerFilter );
105 mClipRenderStateSet->setObjectName(
"Forward render pass Clip Plane RenderStateSet" );
107 mForwardColorTexture =
new Qt3DRender::QTexture2D;
108 mForwardColorTexture->setWidth( mSize.width() );
109 mForwardColorTexture->setHeight( mSize.height() );
110 mForwardColorTexture->setFormat( Qt3DRender::QAbstractTexture::RGB8_UNorm );
111 mForwardColorTexture->setGenerateMipMaps(
false );
112 mForwardColorTexture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
113 mForwardColorTexture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
114 mForwardColorTexture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::ClampToEdge );
115 mForwardColorTexture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::ClampToEdge );
117 mForwardDepthTexture =
new Qt3DRender::QTexture2D;
118 mForwardDepthTexture->setWidth( mSize.width() );
119 mForwardDepthTexture->setHeight( mSize.height() );
120 mForwardDepthTexture->setFormat( Qt3DRender::QTexture2D::TextureFormat::DepthFormat );
121 mForwardDepthTexture->setGenerateMipMaps(
false );
122 mForwardDepthTexture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
123 mForwardDepthTexture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
124 mForwardDepthTexture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::ClampToEdge );
125 mForwardDepthTexture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::ClampToEdge );
127 Qt3DRender::QRenderTarget *forwardRenderTarget =
new Qt3DRender::QRenderTarget;
128 Qt3DRender::QRenderTargetOutput *forwardRenderTargetDepthOutput =
new Qt3DRender::QRenderTargetOutput;
129 forwardRenderTargetDepthOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
130 forwardRenderTargetDepthOutput->setTexture( mForwardDepthTexture );
131 forwardRenderTarget->addOutput( forwardRenderTargetDepthOutput );
132 Qt3DRender::QRenderTargetOutput *forwardRenderTargetColorOutput =
new Qt3DRender::QRenderTargetOutput;
133 forwardRenderTargetColorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
134 forwardRenderTargetColorOutput->setTexture( mForwardColorTexture );
135 forwardRenderTarget->addOutput( forwardRenderTargetColorOutput );
137 mForwardRenderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mClipRenderStateSet );
138 mForwardRenderTargetSelector->setTarget( forwardRenderTarget );
141 Qt3DRender::QLayerFilter *opaqueObjectsFilter =
new Qt3DRender::QLayerFilter( mForwardRenderTargetSelector );
142 opaqueObjectsFilter->addLayer( mTransparentObjectsPassLayer );
143 opaqueObjectsFilter->setFilterMode( Qt3DRender::QLayerFilter::DiscardAnyMatchingLayers );
145 Qt3DRender::QRenderStateSet *forwardedRenderStateSet =
new Qt3DRender::QRenderStateSet( opaqueObjectsFilter );
147 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
148 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
149 forwardedRenderStateSet->addRenderState( depthTest );
151 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
152 cullFace->setMode( Qt3DRender::QCullFace::CullingMode::Back );
153 forwardedRenderStateSet->addRenderState( cullFace );
155 mFrustumCulling =
new Qt3DRender::QFrustumCulling( forwardedRenderStateSet );
157 mForwardClearBuffers =
new Qt3DRender::QClearBuffers( mFrustumCulling );
158 mForwardClearBuffers->setClearColor( QColor::fromRgbF( 0.0, 0.0, 1.0, 1.0 ) );
159 mForwardClearBuffers->setBuffers( Qt3DRender::QClearBuffers::ColorDepthBuffer );
160 mForwardClearBuffers->setClearDepthValue( 1.0f );
163 Qt3DRender::QLayerFilter *transparentObjectsLayerFilter =
new Qt3DRender::QLayerFilter( mForwardRenderTargetSelector );
164 transparentObjectsLayerFilter->addLayer( mTransparentObjectsPassLayer );
165 transparentObjectsLayerFilter->setFilterMode( Qt3DRender::QLayerFilter::AcceptAnyMatchingLayers );
167 Qt3DRender::QSortPolicy *sortPolicy =
new Qt3DRender::QSortPolicy( transparentObjectsLayerFilter );
168 QVector<Qt3DRender::QSortPolicy::SortType> sortTypes;
169 sortTypes.push_back( Qt3DRender::QSortPolicy::BackToFront );
170 sortPolicy->setSortTypes( sortTypes );
172 Qt3DRender::QRenderStateSet *transparentObjectsRenderStateSetColor =
new Qt3DRender::QRenderStateSet( sortPolicy );
174 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
175 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
176 transparentObjectsRenderStateSetColor->addRenderState( depthTest );
178 Qt3DRender::QNoDepthMask *noDepthMask =
new Qt3DRender::QNoDepthMask;
179 transparentObjectsRenderStateSetColor->addRenderState( noDepthMask );
181 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
182 cullFace->setMode( Qt3DRender::QCullFace::CullingMode::NoCulling );
183 transparentObjectsRenderStateSetColor->addRenderState( cullFace );
185 Qt3DRender::QBlendEquation *blendEquation =
new Qt3DRender::QBlendEquation;
186 blendEquation->setBlendFunction( Qt3DRender::QBlendEquation::Add );
187 transparentObjectsRenderStateSetColor->addRenderState( blendEquation );
189 Qt3DRender::QBlendEquationArguments *blendEquationArgs =
new Qt3DRender::QBlendEquationArguments;
190 blendEquationArgs->setSourceRgb( Qt3DRender::QBlendEquationArguments::Blending::SourceAlpha );
191 blendEquationArgs->setDestinationRgb( Qt3DRender::QBlendEquationArguments::Blending::OneMinusSourceAlpha );
192 transparentObjectsRenderStateSetColor->addRenderState( blendEquationArgs );
196 Qt3DRender::QRenderStateSet *transparentObjectsRenderStateSetDepth =
new Qt3DRender::QRenderStateSet( sortPolicy );
198 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
199 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
200 transparentObjectsRenderStateSetDepth->addRenderState( depthTest );
202 Qt3DRender::QColorMask *noColorMask =
new Qt3DRender::QColorMask;
203 noColorMask->setAlphaMasked(
false );
204 noColorMask->setRedMasked(
false );
205 noColorMask->setGreenMasked(
false );
206 noColorMask->setBlueMasked(
false );
207 transparentObjectsRenderStateSetDepth->addRenderState( noColorMask );
209 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
210 cullFace->setMode( Qt3DRender::QCullFace::CullingMode::NoCulling );
211 transparentObjectsRenderStateSetDepth->addRenderState( cullFace );
214 mDebugOverlay =
new Qt3DRender::QDebugOverlay( mForwardClearBuffers );
215 mDebugOverlay->setEnabled(
false );
219 return mMainCameraSelector;
222Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructShadowRenderPass()
224 mLightCameraSelectorShadowPass =
new Qt3DRender::QCameraSelector;
225 mLightCameraSelectorShadowPass->setObjectName(
"Shadow render pass CameraSelector" );
226 mLightCameraSelectorShadowPass->setCamera( mLightCamera );
228 mShadowSceneEntitiesFilter =
new Qt3DRender::QLayerFilter( mLightCameraSelectorShadowPass );
229 mShadowSceneEntitiesFilter->addLayer( mCastShadowsLayer );
231 mShadowMapTexture =
new Qt3DRender::QTexture2D;
232 mShadowMapTexture->setWidth( mShadowMapResolution );
233 mShadowMapTexture->setHeight( mShadowMapResolution );
234 mShadowMapTexture->setFormat( Qt3DRender::QTexture2D::TextureFormat::DepthFormat );
235 mShadowMapTexture->setGenerateMipMaps(
false );
236 mShadowMapTexture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
237 mShadowMapTexture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
238 mShadowMapTexture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::ClampToEdge );
239 mShadowMapTexture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::ClampToEdge );
241 Qt3DRender::QRenderTarget *shadowRenderTarget =
new Qt3DRender::QRenderTarget;
242 Qt3DRender::QRenderTargetOutput *shadowRenderTargetOutput =
new Qt3DRender::QRenderTargetOutput;
243 shadowRenderTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
244 shadowRenderTargetOutput->setTexture( mShadowMapTexture );
245 shadowRenderTarget->addOutput( shadowRenderTargetOutput );
247 mShadowRenderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mShadowSceneEntitiesFilter );
248 mShadowRenderTargetSelector->setTarget( shadowRenderTarget );
250 mShadowClearBuffers =
new Qt3DRender::QClearBuffers( mShadowRenderTargetSelector );
251 mShadowClearBuffers->setBuffers( Qt3DRender::QClearBuffers::BufferType::ColorDepthBuffer );
252 mShadowClearBuffers->setClearColor( QColor::fromRgbF( 0.0f, 1.0f, 0.0f ) );
254 mShadowRenderStateSet =
new Qt3DRender::QRenderStateSet( mShadowClearBuffers );
256 Qt3DRender::QDepthTest *shadowDepthTest =
new Qt3DRender::QDepthTest;
257 shadowDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
258 mShadowRenderStateSet->addRenderState( shadowDepthTest );
260 Qt3DRender::QCullFace *shadowCullFace =
new Qt3DRender::QCullFace;
261 shadowCullFace->setMode( Qt3DRender::QCullFace::CullingMode::Front );
262 mShadowRenderStateSet->addRenderState( shadowCullFace );
264 Qt3DRender::QPolygonOffset *polygonOffset =
new Qt3DRender::QPolygonOffset;
265 polygonOffset->setDepthSteps( 4.0 );
266 polygonOffset->setScaleFactor( 1.1 );
267 mShadowRenderStateSet->addRenderState( polygonOffset );
269 return mLightCameraSelectorShadowPass;
272Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructSubPostPassForTexturesPreview()
274 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter;
275 layerFilter->setObjectName(
"Sub pass TexturesPreview" );
276 layerFilter->addLayer( mPreviewLayer );
278 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet( layerFilter );
279 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
280 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
281 renderStateSet->addRenderState( depthTest );
282 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
283 cullFace->setMode( Qt3DRender::QCullFace::NoCulling );
284 renderStateSet->addRenderState( cullFace );
289Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructSubPostPassForProcessing()
291 Qt3DRender::QCameraSelector *cameraSelector =
new Qt3DRender::QCameraSelector;
292 cameraSelector->setObjectName(
"Sub pass Postprocessing" );
293 cameraSelector->setCamera( mLightCamera );
295 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter( cameraSelector );
298 new Qt3DRender::QClearBuffers( layerFilter );
300 Qt3DRender::QLayer *postProcessingLayer =
new Qt3DRender::QLayer();
302 layerFilter->addLayer( postProcessingLayer );
303 mPostprocessingEntity->setObjectName(
"PostProcessingPassEntity" );
305 return cameraSelector;
308Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructSubPostPassForRenderCapture()
310 Qt3DRender::QFrameGraphNode *top =
new Qt3DRender::QNoDraw;
311 top->setObjectName(
"Sub pass RenderCapture" );
313 mRenderCapture =
new Qt3DRender::QRenderCapture( top );
318Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructPostprocessingPass()
320 mRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector;
321 mRenderCaptureTargetSelector->setObjectName(
"Postprocessing render pass" );
322 mRenderCaptureTargetSelector->setEnabled( mRenderCaptureEnabled );
324 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget( mRenderCaptureTargetSelector );
330 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( renderTarget );
331 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
334 mRenderCaptureColorTexture =
new Qt3DRender::QTexture2D( colorOutput );
335 mRenderCaptureColorTexture->setSize( mSize.width(), mSize.height() );
336 mRenderCaptureColorTexture->setFormat( Qt3DRender::QAbstractTexture::RGB8_UNorm );
337 mRenderCaptureColorTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
338 mRenderCaptureColorTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
339 mRenderCaptureColorTexture->setObjectName(
"PostProcessingPass::ColorTarget" );
342 colorOutput->setTexture( mRenderCaptureColorTexture );
343 renderTarget->addOutput( colorOutput );
345 Qt3DRender::QRenderTargetOutput *depthOutput =
new Qt3DRender::QRenderTargetOutput( renderTarget );
347 depthOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
348 mRenderCaptureDepthTexture =
new Qt3DRender::QTexture2D( depthOutput );
349 mRenderCaptureDepthTexture->setSize( mSize.width(), mSize.height() );
350 mRenderCaptureDepthTexture->setFormat( Qt3DRender::QAbstractTexture::DepthFormat );
351 mRenderCaptureDepthTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
352 mRenderCaptureDepthTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
353 mRenderCaptureDepthTexture->setComparisonFunction( Qt3DRender::QAbstractTexture::CompareLessEqual );
354 mRenderCaptureDepthTexture->setComparisonMode( Qt3DRender::QAbstractTexture::CompareRefToTexture );
355 mRenderCaptureDepthTexture->setObjectName(
"PostProcessingPass::DepthTarget" );
357 depthOutput->setTexture( mRenderCaptureDepthTexture );
358 renderTarget->addOutput( depthOutput );
360 mRenderCaptureTargetSelector->setTarget( renderTarget );
363 constructSubPostPassForProcessing()->setParent( mRenderCaptureTargetSelector );
364 constructSubPostPassForTexturesPreview()->setParent( mRenderCaptureTargetSelector );
365 constructSubPostPassForRenderCapture()->setParent( mRenderCaptureTargetSelector );
367 return mRenderCaptureTargetSelector;
370Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructAmbientOcclusionRenderPass()
372 mAmbientOcclusionRenderCameraSelector =
new Qt3DRender::QCameraSelector;
373 mAmbientOcclusionRenderCameraSelector->setObjectName(
"AmbientOcclusion render pass CameraSelector" );
374 mAmbientOcclusionRenderCameraSelector->setCamera( mMainCamera );
376 mAmbientOcclusionRenderStateSet =
new Qt3DRender::QRenderStateSet( mAmbientOcclusionRenderCameraSelector );
378 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
379 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
381 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
382 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
384 mAmbientOcclusionRenderStateSet->addRenderState( depthRenderDepthTest );
385 mAmbientOcclusionRenderStateSet->addRenderState( depthRenderCullFace );
387 mAmbientOcclusionRenderLayerFilter =
new Qt3DRender::QLayerFilter( mAmbientOcclusionRenderStateSet );
389 mAmbientOcclusionRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector( mAmbientOcclusionRenderLayerFilter );
390 Qt3DRender::QRenderTarget *colorRenderTarget =
new Qt3DRender::QRenderTarget( mAmbientOcclusionRenderCaptureTargetSelector );
396 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( colorRenderTarget );
397 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
400 mAmbientOcclusionRenderTexture =
new Qt3DRender::QTexture2D( colorOutput );
401 mAmbientOcclusionRenderTexture->setSize( mSize.width(), mSize.height() );
402 mAmbientOcclusionRenderTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
403 mAmbientOcclusionRenderTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
404 mAmbientOcclusionRenderTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
407 colorOutput->setTexture( mAmbientOcclusionRenderTexture );
408 colorRenderTarget->addOutput( colorOutput );
410 mAmbientOcclusionRenderCaptureTargetSelector->setTarget( colorRenderTarget );
412 Qt3DRender::QLayer *ambientOcclusionRenderLayer =
new Qt3DRender::QLayer();
414 mAmbientOcclusionRenderLayerFilter->addLayer( ambientOcclusionRenderLayer );
416 return mAmbientOcclusionRenderCameraSelector;
419Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructAmbientOcclusionBlurPass()
421 mAmbientOcclusionBlurCameraSelector =
new Qt3DRender::QCameraSelector;
422 mAmbientOcclusionBlurCameraSelector->setObjectName(
"AmbientOcclusion blur pass CameraSelector" );
423 mAmbientOcclusionBlurCameraSelector->setCamera( mMainCamera );
425 mAmbientOcclusionBlurStateSet =
new Qt3DRender::QRenderStateSet( mAmbientOcclusionBlurCameraSelector );
427 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
428 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
430 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
431 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
433 mAmbientOcclusionBlurStateSet->addRenderState( depthRenderDepthTest );
434 mAmbientOcclusionBlurStateSet->addRenderState( depthRenderCullFace );
436 mAmbientOcclusionBlurLayerFilter =
new Qt3DRender::QLayerFilter( mAmbientOcclusionBlurStateSet );
438 mAmbientOcclusionBlurRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector( mAmbientOcclusionBlurLayerFilter );
439 Qt3DRender::QRenderTarget *depthRenderTarget =
new Qt3DRender::QRenderTarget( mAmbientOcclusionBlurRenderCaptureTargetSelector );
445 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( depthRenderTarget );
446 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
449 mAmbientOcclusionBlurTexture =
new Qt3DRender::QTexture2D( colorOutput );
450 mAmbientOcclusionBlurTexture->setSize( mSize.width(), mSize.height() );
451 mAmbientOcclusionBlurTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
452 mAmbientOcclusionBlurTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
453 mAmbientOcclusionBlurTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
456 colorOutput->setTexture( mAmbientOcclusionBlurTexture );
457 depthRenderTarget->addOutput( colorOutput );
459 mAmbientOcclusionBlurRenderCaptureTargetSelector->setTarget( depthRenderTarget );
461 Qt3DRender::QLayer *ambientOcclusionBlurLayer =
new Qt3DRender::QLayer();
463 mAmbientOcclusionBlurLayerFilter->addLayer( ambientOcclusionBlurLayer );
465 return mAmbientOcclusionBlurCameraSelector;
469Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructRubberBandsPass()
471 mRubberBandsCameraSelector =
new Qt3DRender::QCameraSelector;
472 mRubberBandsCameraSelector->setObjectName(
"RubberBands Pass CameraSelector" );
473 mRubberBandsCameraSelector->setCamera( mMainCamera );
475 mRubberBandsLayerFilter =
new Qt3DRender::QLayerFilter( mRubberBandsCameraSelector );
476 mRubberBandsLayerFilter->addLayer( mRubberBandsLayer );
478 Qt3DRender::QBlendEquationArguments *blendState =
new Qt3DRender::QBlendEquationArguments;
479 blendState->setSourceRgb( Qt3DRender::QBlendEquationArguments::SourceAlpha );
480 blendState->setDestinationRgb( Qt3DRender::QBlendEquationArguments::OneMinusSourceAlpha );
482 Qt3DRender::QBlendEquation *blendEquation =
new Qt3DRender::QBlendEquation;
483 blendEquation->setBlendFunction( Qt3DRender::QBlendEquation::Add );
485 mRubberBandsStateSet =
new Qt3DRender::QRenderStateSet( mRubberBandsLayerFilter );
486 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
487 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
488 mRubberBandsStateSet->addRenderState( depthTest );
489 mRubberBandsStateSet->addRenderState( blendState );
490 mRubberBandsStateSet->addRenderState( blendEquation );
495 mRubberBandsRenderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mRubberBandsStateSet );
496 mRubberBandsRenderTargetSelector->setTarget( mForwardRenderTargetSelector->target() );
498 return mRubberBandsCameraSelector;
502Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructDepthRenderPass()
506 mDepthRenderCameraSelector =
new Qt3DRender::QCameraSelector;
507 mDepthRenderCameraSelector->setObjectName(
"Depth render view CameraSelector" );
508 mDepthRenderCameraSelector->setCamera( mMainCamera );
510 mDepthRenderStateSet =
new Qt3DRender::QRenderStateSet( mDepthRenderCameraSelector );
512 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
513 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
515 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
516 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
518 mDepthRenderStateSet->addRenderState( depthRenderDepthTest );
519 mDepthRenderStateSet->addRenderState( depthRenderCullFace );
521 mDepthRenderLayerFilter =
new Qt3DRender::QLayerFilter( mDepthRenderStateSet );
522 mDepthRenderLayerFilter->addLayer( mDepthRenderPassLayer );
524 mDepthRenderCaptureTargetSelector =
new Qt3DRender::QRenderTargetSelector( mDepthRenderLayerFilter );
525 Qt3DRender::QRenderTarget *depthRenderTarget =
new Qt3DRender::QRenderTarget( mDepthRenderCaptureTargetSelector );
531 Qt3DRender::QRenderTargetOutput *colorOutput =
new Qt3DRender::QRenderTargetOutput( depthRenderTarget );
532 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
535 mDepthRenderCaptureColorTexture =
new Qt3DRender::QTexture2D( colorOutput );
536 mDepthRenderCaptureColorTexture->setSize( mSize.width(), mSize.height() );
537 mDepthRenderCaptureColorTexture->setFormat( Qt3DRender::QAbstractTexture::RGB8_UNorm );
538 mDepthRenderCaptureColorTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
539 mDepthRenderCaptureColorTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
542 colorOutput->setTexture( mDepthRenderCaptureColorTexture );
543 depthRenderTarget->addOutput( colorOutput );
545 Qt3DRender::QRenderTargetOutput *depthOutput =
new Qt3DRender::QRenderTargetOutput( depthRenderTarget );
547 depthOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
548 mDepthRenderCaptureDepthTexture =
new Qt3DRender::QTexture2D( depthOutput );
549 mDepthRenderCaptureDepthTexture->setSize( mSize.width(), mSize.height() );
550 mDepthRenderCaptureDepthTexture->setFormat( Qt3DRender::QAbstractTexture::DepthFormat );
551 mDepthRenderCaptureDepthTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
552 mDepthRenderCaptureDepthTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
553 mDepthRenderCaptureDepthTexture->setComparisonFunction( Qt3DRender::QAbstractTexture::CompareLessEqual );
554 mDepthRenderCaptureDepthTexture->setComparisonMode( Qt3DRender::QAbstractTexture::CompareRefToTexture );
556 depthOutput->setTexture( mDepthRenderCaptureDepthTexture );
557 depthRenderTarget->addOutput( depthOutput );
559 mDepthRenderCaptureTargetSelector->setTarget( depthRenderTarget );
562 mDepthRenderCapture =
new Qt3DRender::QRenderCapture( mDepthRenderCaptureTargetSelector );
564 return mDepthRenderCameraSelector;
567Qt3DCore::QEntity *QgsFrameGraph::constructDepthRenderQuad()
569 Qt3DCore::QEntity *quad =
new Qt3DCore::QEntity;
570 quad->setObjectName(
"depthRenderQuad" );
574 const QVector<float> vert = { -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f };
576 const QByteArray vertexArr( (
const char * ) vert.constData(), vert.size() *
sizeof(
float ) );
579 vertexBuffer->setData( vertexArr );
581 positionAttribute->setName( Qt3DQAttribute::defaultPositionAttributeName() );
582 positionAttribute->setVertexBaseType( Qt3DQAttribute::Float );
583 positionAttribute->setVertexSize( 3 );
584 positionAttribute->setAttributeType( Qt3DQAttribute::VertexAttribute );
585 positionAttribute->setBuffer( vertexBuffer );
586 positionAttribute->setByteOffset( 0 );
587 positionAttribute->setByteStride( 3 *
sizeof(
float ) );
588 positionAttribute->setCount( 6 );
590 geom->addAttribute( positionAttribute );
592 Qt3DRender::QGeometryRenderer *renderer =
new Qt3DRender::QGeometryRenderer;
593 renderer->setPrimitiveType( Qt3DRender::QGeometryRenderer::PrimitiveType::Triangles );
594 renderer->setGeometry( geom );
596 quad->addComponent( renderer );
598 QMatrix4x4 modelMatrix;
599 modelMatrix.setToIdentity();
603 Qt3DRender::QMaterial *material =
new Qt3DRender::QMaterial;
604 Qt3DRender::QParameter *textureParameter =
new Qt3DRender::QParameter(
"depthTexture", mForwardDepthTexture );
605 Qt3DRender::QParameter *textureTransformParameter =
new Qt3DRender::QParameter(
"modelMatrix", QVariant::fromValue( modelMatrix ) );
606 material->addParameter( textureParameter );
607 material->addParameter( textureTransformParameter );
609 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect;
611 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
613 Qt3DRender::QGraphicsApiFilter *graphicsApiFilter = technique->graphicsApiFilter();
614 graphicsApiFilter->setApi( Qt3DRender::QGraphicsApiFilter::Api::OpenGL );
615 graphicsApiFilter->setProfile( Qt3DRender::QGraphicsApiFilter::OpenGLProfile::CoreProfile );
616 graphicsApiFilter->setMajorVersion( 1 );
617 graphicsApiFilter->setMinorVersion( 5 );
619 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass;
621 Qt3DRender::QShaderProgram *shader =
new Qt3DRender::QShaderProgram;
622 shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl(
"qrc:/shaders/depth_render.vert" ) ) );
623 shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl(
"qrc:/shaders/depth_render.frag" ) ) );
624 renderPass->setShaderProgram( shader );
626 technique->addRenderPass( renderPass );
628 effect->addTechnique( technique );
629 material->setEffect( effect );
631 quad->addComponent( material );
670 mLightCamera =
new Qt3DRender::QCamera;
672 mPreviewLayer =
new Qt3DRender::QLayer;
673 mCastShadowsLayer =
new Qt3DRender::QLayer;
674 mForwardRenderLayer =
new Qt3DRender::QLayer;
675 mDepthRenderPassLayer =
new Qt3DRender::QLayer;
676 mTransparentObjectsPassLayer =
new Qt3DRender::QLayer;
677 mRubberBandsLayer =
new Qt3DRender::QLayer;
679 mRubberBandsLayer->setObjectName(
"mRubberBandsLayer" );
681 mPreviewLayer->setRecursive(
true );
682 mCastShadowsLayer->setRecursive(
true );
683 mForwardRenderLayer->setRecursive(
true );
684 mDepthRenderPassLayer->setRecursive(
true );
685 mTransparentObjectsPassLayer->setRecursive(
true );
686 mRubberBandsLayer->setRecursive(
true );
688 mRenderSurfaceSelector =
new Qt3DRender::QRenderSurfaceSelector;
690 QObject *surfaceObj =
dynamic_cast<QObject *
>( surface );
691 Q_ASSERT( surfaceObj );
693 mRenderSurfaceSelector->setSurface( surfaceObj );
694 mRenderSurfaceSelector->setExternalRenderTargetSize( mSize );
696 mMainViewPort =
new Qt3DRender::QViewport( mRenderSurfaceSelector );
697 mMainViewPort->setNormalizedRect( QRectF( 0.0f, 0.0f, 1.0f, 1.0f ) );
700 Qt3DRender::QFrameGraphNode *forwardRenderPass = constructForwardRenderPass();
701 forwardRenderPass->setParent( mMainViewPort );
704 Qt3DRender::QFrameGraphNode *rubberBandsPass = constructRubberBandsPass();
705 rubberBandsPass->setObjectName(
"rubberBandsPass" );
706 rubberBandsPass->setParent( mMainViewPort );
709 Qt3DRender::QFrameGraphNode *shadowRenderPass = constructShadowRenderPass();
710 shadowRenderPass->setParent( mMainViewPort );
713 Qt3DRender::QFrameGraphNode *depthBufferProcessingPass = constructDepthRenderPass();
714 depthBufferProcessingPass->setParent( mMainViewPort );
717 Qt3DRender::QFrameGraphNode *ambientOcclusionFactorRender = constructAmbientOcclusionRenderPass();
718 ambientOcclusionFactorRender->setParent( mMainViewPort );
720 Qt3DRender::QFrameGraphNode *ambientOcclusionBlurPass = constructAmbientOcclusionBlurPass();
721 ambientOcclusionBlurPass->setParent( mMainViewPort );
724 Qt3DRender::QFrameGraphNode *postprocessingPass = constructPostprocessingPass();
725 postprocessingPass->setParent( mMainViewPort );
726 postprocessingPass->setObjectName(
"PostProcessingPass" );
728 mRubberBandsRootEntity =
new Qt3DCore::QEntity( mRootEntity );
729 mRubberBandsRootEntity->setObjectName(
"mRubberBandsRootEntity" );
730 mRubberBandsRootEntity->addComponent( mRubberBandsLayer );
732 Qt3DRender::QParameter *depthMapIsDepthParam =
new Qt3DRender::QParameter(
"isDepth",
true );
733 Qt3DRender::QParameter *shadowMapIsDepthParam =
new Qt3DRender::QParameter(
"isDepth",
true );
735 mDebugDepthMapPreviewQuad = this->
addTexturePreviewOverlay( mForwardDepthTexture, QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ), QVector<Qt3DRender::QParameter *> { depthMapIsDepthParam } );
736 mDebugShadowMapPreviewQuad = this->
addTexturePreviewOverlay( mShadowMapTexture, QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ), QVector<Qt3DRender::QParameter *> { shadowMapIsDepthParam } );
737 mDebugDepthMapPreviewQuad->setEnabled(
false );
738 mDebugShadowMapPreviewQuad->setEnabled(
false );
740 mDepthRenderQuad = constructDepthRenderQuad();
741 mDepthRenderQuad->addComponent( mDepthRenderPassLayer );
742 mDepthRenderQuad->setParent( mRootEntity );
748 previewQuad->addComponent( mPreviewLayer );
749 previewQuad->setParent( mRootEntity );
750 mPreviewQuads.push_back( previewQuad );
755void calculateViewExtent( Qt3DRender::QCamera *camera,
float shadowRenderingDistance,
float z,
float &minX,
float &maxX,
float &minY,
float &maxY,
float &minZ,
float &maxZ )
757 const QVector3D cameraPos = camera->position();
758 const QMatrix4x4 projectionMatrix = camera->projectionMatrix();
759 const QMatrix4x4 viewMatrix = camera->viewMatrix();
761 QVector4D viewCenter = viewMatrix * QVector4D( camera->viewCenter(), 1.0f );
762 viewCenter /= viewCenter.w();
763 viewCenter = projectionMatrix * viewCenter;
764 viewCenter /= viewCenter.w();
765 depth = viewCenter.z();
766 QVector<QVector3D> viewFrustumPoints = {
767 QVector3D( 0.0f, 0.0f, depth ),
768 QVector3D( 0.0f, 1.0f, depth ),
769 QVector3D( 1.0f, 0.0f, depth ),
770 QVector3D( 1.0f, 1.0f, depth ),
771 QVector3D( 0.0f, 0.0f, 0 ),
772 QVector3D( 0.0f, 1.0f, 0 ),
773 QVector3D( 1.0f, 0.0f, 0 ),
774 QVector3D( 1.0f, 1.0f, 0 )
776 maxX = std::numeric_limits<float>::lowest();
777 maxY = std::numeric_limits<float>::lowest();
778 maxZ = std::numeric_limits<float>::lowest();
779 minX = std::numeric_limits<float>::max();
780 minY = std::numeric_limits<float>::max();
781 minZ = std::numeric_limits<float>::max();
782 for (
int i = 0; i < viewFrustumPoints.size(); ++i )
785 viewFrustumPoints[i] = viewFrustumPoints[i].unproject( viewMatrix, projectionMatrix, QRect( 0, 0, 1, 1 ) );
786 minX = std::min( minX, viewFrustumPoints[i].x() );
787 maxX = std::max( maxX, viewFrustumPoints[i].x() );
788 minY = std::min( minY, viewFrustumPoints[i].y() );
789 maxY = std::max( maxY, viewFrustumPoints[i].y() );
790 minZ = std::min( minZ, viewFrustumPoints[i].z() );
791 maxZ = std::max( maxZ, viewFrustumPoints[i].z() );
796 const QVector3D pt = cameraPos;
797 const QVector3D vect = ( viewFrustumPoints[i] - pt ).normalized();
798 float t = ( z - pt.z() ) / vect.z();
800 t = shadowRenderingDistance;
802 t = std::min( t, shadowRenderingDistance );
803 viewFrustumPoints[i] = pt + t * vect;
804 minX = std::min( minX, viewFrustumPoints[i].x() );
805 maxX = std::max( maxX, viewFrustumPoints[i].x() );
806 minY = std::min( minY, viewFrustumPoints[i].y() );
807 maxY = std::max( maxY, viewFrustumPoints[i].y() );
808 minZ = std::min( minZ, viewFrustumPoints[i].z() );
809 maxZ = std::max( maxZ, viewFrustumPoints[i].z() );
815 float minX, maxX, minY, maxY, minZ, maxZ;
816 QVector3D lookingAt = mMainCamera->viewCenter();
817 const float d = 2 * ( mMainCamera->position() - mMainCamera->viewCenter() ).length();
820 calculateViewExtent( mMainCamera, maximumShadowRenderingDistance, lookingAt.z(), minX, maxX, minY, maxY, minZ, maxZ );
822 lookingAt = QVector3D( 0.5f * ( minX + maxX ), 0.5f * ( minY + maxY ), mMainCamera->viewCenter().z() );
823 const QVector3D lightPosition = lookingAt + QVector3D( 0.0f, 0.0f, d );
824 mLightCamera->setPosition( lightPosition );
825 mLightCamera->setViewCenter( lookingAt );
826 mLightCamera->setUpVector( QVector3D( 0.0f, 1.0f, 0.0f ) );
827 mLightCamera->rotateAboutViewCenter( QQuaternion::rotationTo( QVector3D( 0.0f, 0.0f, -1.0f ), lightDirection ) );
829 mLightCamera->setProjectionType( Qt3DRender::QCameraLens::ProjectionType::OrthographicProjection );
830 mLightCamera->lens()->setOrthographicProjection(
831 -0.7f * ( maxX - minX ), 0.7f * ( maxX - minX ),
832 -0.7f * ( maxY - minY ), 0.7f * ( maxY - minY ),
833 1.0f, 2 * ( lookingAt - lightPosition ).length()
842 QObject *top = mRenderSurfaceSelector;
843 while ( top->parent() &&
dynamic_cast<Qt3DRender::QFrameGraphNode *
>( top->parent() ) )
847 context.
lowestId = mMainCamera->id().id();
850 return qPrintable( strList.join(
"\n" ) ) + QString(
"\n" );
856 return qPrintable( strList.join(
"\n" ) ) + QString(
"\n" );
861 mForwardClearBuffers->setClearColor( clearColor );
866 mShadowRenderingEnabled = enabled;
868 if ( mShadowRenderingEnabled )
869 mShadowSceneEntitiesFilter->setEnabled(
true );
871 mShadowSceneEntitiesFilter->setEnabled(
false );
882 mShadowMapResolution = resolution;
883 mShadowMapTexture->setWidth( mShadowMapResolution );
884 mShadowMapTexture->setHeight( mShadowMapResolution );
889 mAmbientOcclusionEnabled = enabled;
890 mAmbientOcclusionRenderEntity->setEnabled( enabled );
896 mAmbientOcclusionIntensity = intensity;
897 mAmbientOcclusionRenderEntity->
setIntensity( intensity );
902 mAmbientOcclusionRadius = radius;
903 mAmbientOcclusionRenderEntity->
setRadius( radius );
908 mAmbientOcclusionThreshold = threshold;
909 mAmbientOcclusionRenderEntity->
setThreshold( threshold );
914 if ( enabled == mFrustumCullingEnabled )
916 mFrustumCullingEnabled = enabled;
917 if ( mFrustumCullingEnabled )
918 mFrustumCulling->setParent( mForwardClearBuffers );
920 mFrustumCulling->setParent( ( Qt3DCore::QNode * )
nullptr );
925 mEyeDomeLightingEnabled = enabled;
926 mEyeDomeLightingStrength = strength;
927 mEyeDomeLightingDistance = distance;
935 mDebugShadowMapPreviewQuad->setEnabled( enabled );
940 case Qt::Corner::TopRightCorner:
941 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
943 case Qt::Corner::TopLeftCorner:
944 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
946 case Qt::Corner::BottomRightCorner:
947 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
949 case Qt::Corner::BottomLeftCorner:
950 mDebugShadowMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
958 mDebugDepthMapPreviewQuad->setEnabled( enabled );
964 case Qt::Corner::TopRightCorner:
965 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
967 case Qt::Corner::TopLeftCorner:
968 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
970 case Qt::Corner::BottomRightCorner:
971 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 1.0f - size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
973 case Qt::Corner::BottomLeftCorner:
974 mDebugDepthMapPreviewQuad->
setViewPort( QPointF( 0.0f + size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
983 mForwardColorTexture->setSize( mSize.width(), mSize.height() );
984 mForwardDepthTexture->setSize( mSize.width(), mSize.height() );
985 mRenderCaptureColorTexture->setSize( mSize.width(), mSize.height() );
986 mRenderCaptureDepthTexture->setSize( mSize.width(), mSize.height() );
987 mDepthRenderCaptureDepthTexture->setSize( mSize.width(), mSize.height() );
988 mDepthRenderCaptureColorTexture->setSize( mSize.width(), mSize.height() );
989 mRenderSurfaceSelector->setExternalRenderTargetSize( mSize );
991 mAmbientOcclusionRenderTexture->setSize( mSize.width(), mSize.height() );
992 mAmbientOcclusionBlurTexture->setSize( mSize.width(), mSize.height() );
997 if ( enabled == mRenderCaptureEnabled )
999 mRenderCaptureEnabled = enabled;
1000 mRenderCaptureTargetSelector->setEnabled( mRenderCaptureEnabled );
1005 mDebugOverlay->setEnabled( enabled );
1010 for ( Qt3DRender::QRenderState *state : mClipRenderStateSet->renderStates() )
1012 if ( qobject_cast<Qt3DRender::QClipPlane *>( state ) )
1014 mClipRenderStateSet->removeRenderState( state );
1025 for (
int i = 0; i < nrClipPlanes; ++i )
1027 Qt3DRender::QClipPlane *clipPlane =
new Qt3DRender::QClipPlane;
1028 clipPlane->setPlaneIndex( i );
1029 mClipRenderStateSet->addRenderState( clipPlane );
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.
QgsVector3D direction() const
Returns the direction of the light in degrees.
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...
void addClipPlanes(int nrClipPlanes)
Setups nrClipPlanes clip planes in the forward pass to enable OpenGL clipping.
QString dumpFrameGraph() const
Dumps frame graph as string.
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
void removeClipPlanes()
Disables OpenGL clipping.
void setShadowBias(float shadowBias)
Sets the shadow bias value.
void setupShadowMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the shadow map debugging view port.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
void setShadowMapResolution(int resolution)
Sets the resolution of the shadow map.
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.
float shadowBias() const
Returns the shadow bias value.
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
void setDebugOverlayEnabled(bool enabled)
Sets whether debug overlay is enabled.
void setShadowRenderingEnabled(bool enabled)
Sets whether the shadow rendering is enabled.
void setupDepthMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the depth map debugging view port.
void setupDirectionalLight(const QgsDirectionalLightSettings &light, float maximumShadowRenderingDistance)
Sets shadow rendering to use a directional light.
void setAmbientOcclusionThreshold(float threshold)
Sets the ambient occlusion threshold.
QString dumpSceneGraph() const
Dumps scene graph as string.
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.
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.
void setupShadowRenderingExtent(float minX, float maxX, float minY, float maxY)
Sets the parts of the scene where objects cast shadows.
void setAmbientOcclusionEnabled(bool enabled)
Sets whether screen space ambient occlusion is enabled.
void setShadowRenderingEnabled(bool enabled)
Sets whether shadow rendering is enabled.
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 setupDirectionalLight(QVector3D position, QVector3D direction)
Sets up a directional light that is used to render shadows.
void setEyeDomeLightingEnabled(bool enabled)
Sets whether eye dome lighting is enabled.
void setViewPort(const QPointF ¢erNDC, const QSizeF &size)
Sets where the quad will be located on the scene.
double y() const
Returns Y coordinate.
double z() const
Returns Z coordinate.
double x() const
Returns X coordinate.
Qt3DCore::QAttribute Qt3DQAttribute
Qt3DCore::QBuffer Qt3DQBuffer
Qt3DCore::QGeometry Qt3DQGeometry
Qt3DCore::QAttribute Qt3DQAttribute
void calculateViewExtent(Qt3DRender::QCamera *camera, float shadowRenderingDistance, float z, float &minX, float &maxX, float &minY, float &maxY, float &minZ, float &maxZ)
Qt3DCore::QBuffer Qt3DQBuffer
Qt3DCore::QGeometry Qt3DQGeometry