17#include <Qt3DRender/QCamera>
18#include <Qt3DRender/QLayerFilter>
19#include <Qt3DRender/QLayer>
20#include <Qt3DRender/QRenderTargetSelector>
21#include <Qt3DRender/QRenderTarget>
22#include <Qt3DRender/QTexture>
23#include <Qt3DRender/qsubtreeenabler.h>
24#include <Qt3DRender/QCameraSelector>
25#include <Qt3DRender/QRenderStateSet>
26#include <Qt3DRender/QDepthTest>
27#include <Qt3DRender/QCullFace>
36 mAOPassLayer =
new Qt3DRender::QLayer;
37 mAOPassLayer->setRecursive(
true );
38 mAOPassLayer->setObjectName(
mViewName +
"::Layer(AO)" );
40 mBlurPassLayer =
new Qt3DRender::QLayer;
41 mBlurPassLayer->setRecursive(
true );
42 mBlurPassLayer->setObjectName(
mViewName +
"::Layer(Blur)" );
45 buildRenderPasses( mSize, forwardDepthTexture, rootSceneEntity, mainCamera );
50 mAOPassTexture->setSize( width, height );
51 mBlurPassTexture->setSize( width, height );
57 mAmbientOcclusionRenderEntity->setEnabled( enable );
58 mAmbientOcclusionBlurEntity->setEnabled( enable );
61Qt3DRender::QRenderTarget *QgsAmbientOcclusionRenderView::buildAOTexture( QSize mSize )
64 Qt3DRender::QRenderTargetOutput *colorTargetOutput =
new Qt3DRender::QRenderTargetOutput;
65 colorTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
67 mAOPassTexture =
new Qt3DRender::QTexture2D( colorTargetOutput );
68 mAOPassTexture->setSize( mSize.width(), mSize.height() );
69 mAOPassTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
70 mAOPassTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
71 mAOPassTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
72 mAOPassTexture->setObjectName(
mViewName +
"::ColorTarget(AO)" );
73 colorTargetOutput->setTexture( mAOPassTexture );
75 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
76 renderTarget->addOutput( colorTargetOutput );
81Qt3DRender::QRenderTarget *QgsAmbientOcclusionRenderView::buildBlurTexture( QSize mSize )
84 Qt3DRender::QRenderTargetOutput *colorTargetOutput =
new Qt3DRender::QRenderTargetOutput;
85 colorTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
87 mBlurPassTexture =
new Qt3DRender::QTexture2D( colorTargetOutput );
88 mBlurPassTexture->setSize( mSize.width(), mSize.height() );
89 mBlurPassTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
90 mBlurPassTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
91 mBlurPassTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
92 mBlurPassTexture->setObjectName(
mViewName +
"::ColorTarget(blur)" );
93 colorTargetOutput->setTexture( mBlurPassTexture );
95 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
96 renderTarget->addOutput( colorTargetOutput );
101void QgsAmbientOcclusionRenderView::buildRenderPasses( QSize mSize, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity, Qt3DRender::QCamera *mainCamera )
105 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet(
mRendererEnabler );
107 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
108 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
109 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
110 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
112 renderStateSet->addRenderState( depthRenderDepthTest );
113 renderStateSet->addRenderState( depthRenderCullFace );
115 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter( renderStateSet );
116 layerFilter->addLayer( mAOPassLayer );
118 Qt3DRender::QRenderTarget *renderTarget = buildAOTexture( mSize );
120 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( layerFilter );
121 renderTargetSelector->setObjectName(
mViewName +
"::RenderTargetSelector(AO)" );
122 renderTargetSelector->setTarget( renderTarget );
129 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet(
mRendererEnabler );
131 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
132 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
133 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
134 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
136 renderStateSet->addRenderState( depthRenderDepthTest );
137 renderStateSet->addRenderState( depthRenderCullFace );
139 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter( renderStateSet );
140 layerFilter->addLayer( mBlurPassLayer );
142 Qt3DRender::QRenderTarget *renderTarget = buildBlurTexture( mSize );
144 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( layerFilter );
145 renderTargetSelector->setObjectName(
mViewName +
"::RenderTargetSelector(Blur)" );
146 renderTargetSelector->setTarget( renderTarget );
154 mAmbientOcclusionRenderEntity->
setIntensity( intensity );
159 mAmbientOcclusionRenderEntity->
setRadius( radius );
164 mAmbientOcclusionRenderEntity->
setThreshold( threshold );
169 return mBlurPassTexture;
Base class for 3D render view.
Qt3DRender::QSubtreeEnabler * mRendererEnabler
virtual void setEnabled(bool enable)
Enable or disable via enable the render view sub tree.
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.
void setRadius(float radius)
Delegates to QgsAmbientOcclusionRenderEntity::setRadius.
virtual void setEnabled(bool enable) override
Enable or disable via enable the render view sub tree.
virtual void updateWindowResize(int width, int height) override
Called when 3D window is resized.
QgsAmbientOcclusionRenderView(const QString &viewName, Qt3DRender::QCamera *mainCamera, QSize mSize, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity)
Default constructor.
void setIntensity(float intensity)
Delegates to QgsAmbientOcclusionRenderEntity::setIntensity.
void setThreshold(float threshold)
Delegates to QgsAmbientOcclusionRenderEntity::setThreshold.
Qt3DRender::QTexture2D * blurredFactorMapTexture() const
Returns blur pass texture.