21#include <Qt3DRender/QCamera>
22#include <Qt3DRender/QCameraSelector>
23#include <Qt3DRender/QClearBuffers>
24#include <Qt3DRender/QCullFace>
25#include <Qt3DRender/QDepthTest>
26#include <Qt3DRender/QFrustumCulling>
27#include <Qt3DRender/QLayer>
28#include <Qt3DRender/QLayerFilter>
29#include <Qt3DRender/QParameter>
30#include <Qt3DRender/QPolygonOffset>
31#include <Qt3DRender/QRenderStateSet>
32#include <Qt3DRender/QRenderSurfaceSelector>
33#include <Qt3DRender/QRenderTarget>
34#include <Qt3DRender/QRenderTargetSelector>
35#include <Qt3DRender/QTexture>
36#include <Qt3DRender/QViewport>
37#include <Qt3DRender/qsubtreeenabler.h>
42 mLightCamera =
new Qt3DRender::QCamera;
43 mLightCamera->setObjectName(
mViewName +
"::LightCamera" );
44 mEntityCastingShadowsLayer =
new Qt3DRender::QLayer;
45 mEntityCastingShadowsLayer->setRecursive(
true );
46 mEntityCastingShadowsLayer->setObjectName(
mViewName +
"::Layer" );
55 mLayerFilter->setEnabled( enable );
58Qt3DRender::QRenderTarget *QgsShadowRenderView::buildTextures()
60 mMapTexture =
new Qt3DRender::QTexture2D;
61 mMapTexture->setWidth( mDefaultMapResolution );
62 mMapTexture->setHeight( mDefaultMapResolution );
63 mMapTexture->setFormat( Qt3DRender::QTexture2D::TextureFormat::DepthFormat );
64 mMapTexture->setGenerateMipMaps(
false );
65 mMapTexture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
66 mMapTexture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
67 mMapTexture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::ClampToEdge );
68 mMapTexture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::ClampToEdge );
69 mMapTexture->setObjectName(
mViewName +
"::MapTexture" );
71 Qt3DRender::QRenderTargetOutput *renderTargetOutput =
new Qt3DRender::QRenderTargetOutput;
72 renderTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
73 renderTargetOutput->setTexture( mMapTexture );
75 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
76 renderTarget->setObjectName(
mViewName +
"::RenderTarget" );
77 renderTarget->addOutput( renderTargetOutput );
82void QgsShadowRenderView::buildRenderPass()
85 Qt3DRender::QCameraSelector *lightCameraSelector =
new Qt3DRender::QCameraSelector(
mRendererEnabler );
86 lightCameraSelector->setObjectName(
mViewName +
"::CameraSelector" );
87 lightCameraSelector->setCamera( mLightCamera );
89 mLayerFilter =
new Qt3DRender::QLayerFilter( lightCameraSelector );
90 mLayerFilter->addLayer( mEntityCastingShadowsLayer );
92 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mLayerFilter );
94 Qt3DRender::QClearBuffers *clearBuffers =
new Qt3DRender::QClearBuffers( renderTargetSelector );
95 clearBuffers->setBuffers( Qt3DRender::QClearBuffers::BufferType::ColorDepthBuffer );
96 clearBuffers->setClearColor( QColor::fromRgbF( 0.0f, 1.0f, 0.0f ) );
98 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet( clearBuffers );
100 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
101 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
102 renderStateSet->addRenderState( depthTest );
104 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
105 cullFace->setMode( Qt3DRender::QCullFace::CullingMode::Front );
106 renderStateSet->addRenderState( cullFace );
108 Qt3DRender::QPolygonOffset *polygonOffset =
new Qt3DRender::QPolygonOffset;
109 polygonOffset->setDepthSteps( 4.0 );
110 polygonOffset->setScaleFactor( 1.1 );
111 renderStateSet->addRenderState( polygonOffset );
114 Qt3DRender::QRenderTarget *renderTarget = buildTextures();
116 renderTargetSelector->setTarget( renderTarget );
121 return mEntityCastingShadowsLayer;
127 mMapTexture->setSize( width, height );
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.
Qt3DRender::QLayer * entityCastingShadowsLayer() const
Returns the layer to be used by entities to be included in this renderview.
void setMapSize(int width, int height)
Update shadow depth texture size.
void setEnabled(bool enable) override
Enable or disable via enable the renderview sub tree.
QgsShadowRenderView(const QString &viewName)
Default constructor.
Qt3DRender::QTexture2D * mapTexture() const
Returns shadow depth texture.