QGIS API Documentation  3.23.0-Master (eb871beae0)
qgsskyboxentity.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsskyboxentity.h
3  --------------------------------------
4  Date : August 2020
5  Copyright : (C) 2020 by Belgacem Nedjima
6  Email : gb uderscore nedjima at esi dot dz
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 #ifndef QGSSKYBOXENTITY_H
17 #define QGSSKYBOXENTITY_H
18 
19 #include <Qt3DCore/QEntity>
20 #include <QVector3D>
21 #include <Qt3DRender/QTexture>
22 #include <Qt3DExtras/QCuboidMesh>
23 #include <Qt3DRender/QEffect>
24 #include <Qt3DRender/QMaterial>
25 #include <Qt3DRender/QShaderProgram>
26 #include <Qt3DRender/QFilterKey>
27 #include <Qt3DRender/QRenderPass>
28 #include <Qt3DExtras/QPlaneMesh>
29 #include <Qt3DRender/QParameter>
30 
31 #include "qgis_3d.h"
32 
33 class QgsImageTexture;
34 
35 #define SIP_NO_FILE
36 
44 class _3D_EXPORT QgsSkyboxEntity : public Qt3DCore::QEntity
45 {
46  Q_OBJECT
47  public:
50  {
52  DistinctTexturesSkybox
53  };
54  public:
56  QgsSkyboxEntity( QNode *parent = nullptr );
57 
59  virtual SkyboxType type() const = 0;
60 
61  protected:
62  Qt3DRender::QEffect *mEffect = nullptr;
63  Qt3DRender::QMaterial *mMaterial = nullptr;
64  Qt3DRender::QTechnique *mGl3Technique = nullptr;
65  Qt3DRender::QFilterKey *mFilterKey = nullptr;
66  Qt3DRender::QRenderPass *mGl3RenderPass = nullptr;
67  Qt3DExtras::QCuboidMesh *mMesh = nullptr;
68  Qt3DRender::QParameter *mGammaStrengthParameter = nullptr;
69  Qt3DRender::QParameter *mTextureParameter = nullptr;
70 };
71 
78 class _3D_EXPORT QgsPanoramicSkyboxEntity : public QgsSkyboxEntity
79 {
80  public:
82  QgsPanoramicSkyboxEntity( const QString &texturePath, Qt3DCore::QNode *parent = nullptr );
83 
85  QString texturePath() const { return mTexturePath; }
87  SkyboxType type() const override { return SkyboxType::PanoramicSkybox; }
88 
89  private:
90  void reloadTexture();
91  private:
92  QString mTexturePath;
93  Qt3DRender::QTextureLoader *mLoadedTexture = nullptr;
94  Qt3DRender::QShaderProgram *mGlShader = nullptr;
95 };
96 
103 class _3D_EXPORT QgsCubeFacesSkyboxEntity : public QgsSkyboxEntity
104 {
105  public:
107  QgsCubeFacesSkyboxEntity( const QString &posX, const QString &posY, const QString &posZ, const QString &negX, const QString &negY, const QString &negZ, Qt3DCore::QNode *parent = nullptr );
108 
110  SkyboxType type() const override { return SkyboxType::DistinctTexturesSkybox; }
111 
112  private:
113  void init();
114  void reloadTexture();
115  private:
116  QMap<Qt3DRender::QTextureCubeMap::CubeMapFace, QString> mCubeFacesPaths;
117  Qt3DRender::QShaderProgram *mGlShader = nullptr;
118  QVector<Qt3DRender::QTextureImage *> mFacesTextureImages;
119  Qt3DRender::QTextureCubeMap *mCubeMap = nullptr;
120 };
121 
122 #endif // QGSSKYBOXENTITY_H
A skybox constructed from a 6 cube faces.
SkyboxType type() const override
Returns the type of the current skybox.
Holds an image that can be used as a texture in the 3D view.
A skybox constructed from a panoramic image.
QString texturePath() const
Returns the path of the current texture in use.
SkyboxType type() const override
Returns the type of the current skybox.
Base class for all skybox types.
virtual SkyboxType type() const =0
Returns the type of the current skybox.
SkyboxType
Skybox type enumeration.