21#include <Qt3DRender/QCamera>
22#include <Qt3DRender/QCullFace>
23#include <Qt3DRender/QDepthTest>
24#include <Qt3DRender/QLayer>
25#include <Qt3DRender/QLayerFilter>
26#include <Qt3DRender/QRenderStateSet>
27#include <Qt3DRender/QRenderTarget>
28#include <Qt3DRender/QRenderTargetSelector>
29#include <Qt3DRender/QTexture>
30#include <Qt3DRender/qsubtreeenabler.h>
33 const QString &viewName, Qt3DRender::QCamera *mainCamera, QSize mSize, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity
37 mAOPassLayer =
new Qt3DRender::QLayer;
38 mAOPassLayer->setRecursive(
true );
39 mAOPassLayer->setObjectName(
mViewName +
"::Layer(AO)" );
41 mBlurPassLayer =
new Qt3DRender::QLayer;
42 mBlurPassLayer->setRecursive(
true );
43 mBlurPassLayer->setObjectName(
mViewName +
"::Layer(Blur)" );
46 buildRenderPasses( mSize, forwardDepthTexture, rootSceneEntity, mainCamera );
51 mAOPassTexture->setSize( width, height );
52 mBlurPassTexture->setSize( width, height );
58 mAmbientOcclusionRenderEntity->setEnabled( enable );
59 mAmbientOcclusionBlurEntity->setEnabled( enable );
62Qt3DRender::QRenderTarget *QgsAmbientOcclusionRenderView::buildAOTexture( QSize mSize )
65 Qt3DRender::QRenderTargetOutput *colorTargetOutput =
new Qt3DRender::QRenderTargetOutput;
66 colorTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
68 mAOPassTexture =
new Qt3DRender::QTexture2D( colorTargetOutput );
69 mAOPassTexture->setSize( mSize.width(), mSize.height() );
70 mAOPassTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
71 mAOPassTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
72 mAOPassTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
73 mAOPassTexture->setObjectName(
mViewName +
"::ColorTarget(AO)" );
74 colorTargetOutput->setTexture( mAOPassTexture );
76 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
77 renderTarget->addOutput( colorTargetOutput );
82Qt3DRender::QRenderTarget *QgsAmbientOcclusionRenderView::buildBlurTexture( QSize mSize )
85 Qt3DRender::QRenderTargetOutput *colorTargetOutput =
new Qt3DRender::QRenderTargetOutput;
86 colorTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
88 mBlurPassTexture =
new Qt3DRender::QTexture2D( colorTargetOutput );
89 mBlurPassTexture->setSize( mSize.width(), mSize.height() );
90 mBlurPassTexture->setFormat( Qt3DRender::QAbstractTexture::R32F );
91 mBlurPassTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
92 mBlurPassTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
93 mBlurPassTexture->setObjectName(
mViewName +
"::ColorTarget(blur)" );
94 colorTargetOutput->setTexture( mBlurPassTexture );
96 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
97 renderTarget->addOutput( colorTargetOutput );
102void QgsAmbientOcclusionRenderView::buildRenderPasses( QSize mSize, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity, Qt3DRender::QCamera *mainCamera )
106 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet(
mRendererEnabler );
108 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
109 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
110 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
111 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
113 renderStateSet->addRenderState( depthRenderDepthTest );
114 renderStateSet->addRenderState( depthRenderCullFace );
116 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter( renderStateSet );
117 layerFilter->addLayer( mAOPassLayer );
119 Qt3DRender::QRenderTarget *renderTarget = buildAOTexture( mSize );
121 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( layerFilter );
122 renderTargetSelector->setObjectName(
mViewName +
"::RenderTargetSelector(AO)" );
123 renderTargetSelector->setTarget( renderTarget );
125 mAmbientOcclusionRenderEntity =
new QgsAmbientOcclusionRenderEntity( forwardDepthTexture, mAOPassLayer, mainCamera, rootSceneEntity );
130 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet(
mRendererEnabler );
132 Qt3DRender::QDepthTest *depthRenderDepthTest =
new Qt3DRender::QDepthTest;
133 depthRenderDepthTest->setDepthFunction( Qt3DRender::QDepthTest::Always );
134 Qt3DRender::QCullFace *depthRenderCullFace =
new Qt3DRender::QCullFace;
135 depthRenderCullFace->setMode( Qt3DRender::QCullFace::NoCulling );
137 renderStateSet->addRenderState( depthRenderDepthTest );
138 renderStateSet->addRenderState( depthRenderCullFace );
140 Qt3DRender::QLayerFilter *layerFilter =
new Qt3DRender::QLayerFilter( renderStateSet );
141 layerFilter->addLayer( mBlurPassLayer );
143 Qt3DRender::QRenderTarget *renderTarget = buildBlurTexture( mSize );
145 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( layerFilter );
146 renderTargetSelector->setObjectName(
mViewName +
"::RenderTargetSelector(Blur)" );
147 renderTargetSelector->setTarget( renderTarget );
149 mAmbientOcclusionBlurEntity =
new QgsAmbientOcclusionBlurEntity( mAOPassTexture, mBlurPassLayer, rootSceneEntity );
155 mAmbientOcclusionRenderEntity->setIntensity( intensity );
160 mAmbientOcclusionRenderEntity->setRadius( radius );
165 mAmbientOcclusionRenderEntity->setThreshold( threshold );
170 return mBlurPassTexture;
Qt3DRender::QSubtreeEnabler * mRendererEnabler
virtual void setEnabled(bool enable)
Enable or disable via enable the render view sub tree.
QgsAbstractRenderView(const QString &viewName)
Constructor for QgsAbstractRenderView with the specified parent object.
void setRadius(float radius)
Delegates to QgsAmbientOcclusionRenderEntity::setRadius.
void setEnabled(bool enable) override
Enable or disable via enable the render view sub tree.
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.