20#include <Qt3DRender/QCamera>
21#include <Qt3DRender/QRenderSurfaceSelector>
22#include <Qt3DRender/QViewport>
23#include <Qt3DRender/QCameraSelector>
24#include <Qt3DRender/QLayerFilter>
25#include <Qt3DRender/QLayer>
26#include <Qt3DRender/QRenderTargetSelector>
27#include <Qt3DRender/QRenderTarget>
28#include <Qt3DRender/QTexture>
29#include <Qt3DRender/QClearBuffers>
30#include <Qt3DRender/QParameter>
31#include <Qt3DRender/QFrustumCulling>
32#include <Qt3DRender/QRenderStateSet>
33#include <Qt3DRender/QDepthTest>
34#include <Qt3DRender/QCullFace>
35#include <Qt3DRender/QPolygonOffset>
36#include <Qt3DRender/qsubtreeenabler.h>
41 mLightCamera =
new Qt3DRender::QCamera;
42 mLightCamera->setObjectName(
mViewName +
"::LightCamera" );
43 mEntityCastingShadowsLayer =
new Qt3DRender::QLayer;
44 mEntityCastingShadowsLayer->setRecursive(
true );
45 mEntityCastingShadowsLayer->setObjectName(
mViewName +
"::Layer" );
54 mLayerFilter->setEnabled( enable );
57Qt3DRender::QRenderTarget *QgsShadowRenderView::buildTextures()
59 mMapTexture =
new Qt3DRender::QTexture2D;
60 mMapTexture->setWidth( mDefaultMapResolution );
61 mMapTexture->setHeight( mDefaultMapResolution );
62 mMapTexture->setFormat( Qt3DRender::QTexture2D::TextureFormat::DepthFormat );
63 mMapTexture->setGenerateMipMaps(
false );
64 mMapTexture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
65 mMapTexture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
66 mMapTexture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::ClampToEdge );
67 mMapTexture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::ClampToEdge );
68 mMapTexture->setObjectName(
mViewName +
"::MapTexture" );
70 Qt3DRender::QRenderTargetOutput *renderTargetOutput =
new Qt3DRender::QRenderTargetOutput;
71 renderTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
72 renderTargetOutput->setTexture( mMapTexture );
74 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
75 renderTarget->setObjectName(
mViewName +
"::RenderTarget" );
76 renderTarget->addOutput( renderTargetOutput );
81void QgsShadowRenderView::buildRenderPass()
84 Qt3DRender::QCameraSelector *lightCameraSelector =
new Qt3DRender::QCameraSelector(
mRendererEnabler );
85 lightCameraSelector->setObjectName(
mViewName +
"::CameraSelector" );
86 lightCameraSelector->setCamera( mLightCamera );
88 mLayerFilter =
new Qt3DRender::QLayerFilter( lightCameraSelector );
89 mLayerFilter->addLayer( mEntityCastingShadowsLayer );
91 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mLayerFilter );
93 Qt3DRender::QClearBuffers *clearBuffers =
new Qt3DRender::QClearBuffers( renderTargetSelector );
94 clearBuffers->setBuffers( Qt3DRender::QClearBuffers::BufferType::ColorDepthBuffer );
95 clearBuffers->setClearColor( QColor::fromRgbF( 0.0f, 1.0f, 0.0f ) );
97 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet( clearBuffers );
99 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
100 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
101 renderStateSet->addRenderState( depthTest );
103 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
104 cullFace->setMode( Qt3DRender::QCullFace::CullingMode::Front );
105 renderStateSet->addRenderState( cullFace );
107 Qt3DRender::QPolygonOffset *polygonOffset =
new Qt3DRender::QPolygonOffset;
108 polygonOffset->setDepthSteps( 4.0 );
109 polygonOffset->setScaleFactor( 1.1 );
110 renderStateSet->addRenderState( polygonOffset );
113 Qt3DRender::QRenderTarget *renderTarget = buildTextures();
115 renderTargetSelector->setTarget( renderTarget );
120 return mEntityCastingShadowsLayer;
125 mMapTexture->setSize( width, height );
Base class for 3D render view.
Qt3DRender::QSubtreeEnabler * mRendererEnabler
virtual void setEnabled(bool enable)
Enable or disable via enable the render view sub tree.
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.
virtual 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.