QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
qgswindow3dengine.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgswindow3dengine.cpp
3  --------------------------------------
4  Date : July 2018
5  Copyright : (C) 2018 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #include "qgswindow3dengine.h"
17 
18 #include <Qt3DRender/QRenderCapture>
19 #include <Qt3DExtras/Qt3DWindow>
20 #include <Qt3DExtras/QForwardRenderer>
21 #include <Qt3DRender/QRenderSettings>
22 
23 #include "qgspreviewquad.h"
24 
26  : QgsAbstract3DEngine( parent )
27 {
28  mWindow3D = new Qt3DExtras::Qt3DWindow;
29 
30  mRoot = new Qt3DCore::QEntity;
31  mWindow3D->setRootEntity( mRoot );
32 
33  mFrameGraph = new QgsShadowRenderingFrameGraph( mWindow3D, QSize( 1024, 768 ), mWindow3D->camera(), mRoot );
35  mWindow3D->setActiveFrameGraph( mFrameGraph->frameGraphRoot() );
36 
37  // force switching to no shadow rendering
39 }
40 
42 {
43  return mWindow3D;
44 }
45 
47 {
48  mShadowRenderingEnabled = enabled;
49  mFrameGraph->setShadowRenderingEnabled( mShadowRenderingEnabled );
50 }
51 
52 void QgsWindow3DEngine::setClearColor( const QColor &color )
53 {
54  mFrameGraph->setClearColor( color );
55 }
56 
58 {
59  // Not sure if this works properly
61 }
62 
63 void QgsWindow3DEngine::setRootEntity( Qt3DCore::QEntity *root )
64 {
65  mSceneRoot = root;
66  mSceneRoot->setParent( mRoot );
67  mSceneRoot->addComponent( mFrameGraph->forwardRenderLayer() );
68  mSceneRoot->addComponent( mFrameGraph->castShadowsLayer() );
69 }
70 
71 Qt3DRender::QRenderSettings *QgsWindow3DEngine::renderSettings()
72 {
73  return mWindow3D->renderSettings();
74 }
75 
76 Qt3DRender::QCamera *QgsWindow3DEngine::camera()
77 {
78  return mWindow3D->camera();
79 }
80 
82 {
83  return mWindow3D->size();
84 }
85 
86 QSurface *QgsWindow3DEngine::surface() const
87 {
88  return mWindow3D;
89 }
90 
92 {
93  mSize = s;
94 
95  mWindow3D->setWidth( mSize.width() );
96  mWindow3D->setHeight( mSize.height() );
97  mFrameGraph->setSize( mSize );
98  camera()->setAspectRatio( float( mSize.width() ) / float( mSize.height() ) );
99 }
QgsShadowRenderingFrameGraph * mFrameGraph
void setSize(QSize s)
Sets the size of the buffers used for rendering.
Qt3DRender::QLayer * castShadowsLayer()
Returns a layer object used to indicate that an entity will cast shadows.
Qt3DRender::QLayer * forwardRenderLayer()
Returns a layer object used to indicate that an entity will be rendered during the forward rendering ...
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
Qt3DRender::QFrameGraphNode * frameGraphRoot()
Returns the root of the frame graph object.
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
void setShadowRenderingEnabled(bool enabled)
Sets whether the shadow rendering is enabled.
void setRootEntity(Qt3DCore::QEntity *root) override
Sets root entity of the 3D scene.
Qt3DRender::QRenderSettings * renderSettings() override
Returns access to the engine's render settings (the frame graph can be accessed from here)
void setSize(QSize s) override
Sets the size of the rendering area (in pixels)
QgsWindow3DEngine(QObject *parent=nullptr)
Constructor for QgsWindow3DEngine with the specified parent object.
QSize size() const override
Returns size of the engine's rendering area in pixels.
Qt3DRender::QCamera * camera() override
Returns pointer to the engine's camera entity.
QSurface * surface() const override
Returns the surface of the engine.
void setShadowRenderingEnabled(bool enabled)
Sets whether shadow rendering is enabled.
void setClearColor(const QColor &color) override
Sets background color of the scene.
QWindow * window()
Returns the internal 3D window where all the rendered output is displayed.
void setFrustumCullingEnabled(bool enabled) override
Sets whether frustum culling is enabled (this should make rendering faster by not rendering entities ...