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.