23#include <Qt3DCore/QEntity>
24#include <Qt3DExtras/QCuboidMesh>
25#include <Qt3DRender/QCullFace>
26#include <Qt3DRender/QDepthTest>
27#include <Qt3DRender/QEffect>
28#include <Qt3DRender/QFilterKey>
29#include <Qt3DRender/QGraphicsApiFilter>
30#include <Qt3DRender/QMaterial>
31#include <Qt3DRender/QParameter>
32#include <Qt3DRender/QRenderPass>
33#include <Qt3DRender/QSeamlessCubemap>
34#include <Qt3DRender/QShaderProgram>
35#include <Qt3DRender/QTechnique>
36#include <Qt3DRender/QTextureImage>
38#include "moc_qgsskyboxentity.cpp"
51 mGl3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
54 mGl3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
57 mFilterKey->setName( QStringLiteral(
"renderingStyle" ) );
58 mFilterKey->setValue( QStringLiteral(
"forward" ) );
62 Qt3DRender::QCullFace *cullFront =
new Qt3DRender::QCullFace();
63 cullFront->setMode( Qt3DRender::QCullFace::Front );
64 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest();
65 depthTest->setDepthFunction( Qt3DRender::QDepthTest::LessOrEqual );
66 Qt3DRender::QSeamlessCubemap *seamlessCubemap =
new Qt3DRender::QSeamlessCubemap();
80 mMesh->setXYMeshResolution( QSize( 2, 2 ) );
81 mMesh->setXZMeshResolution( QSize( 2, 2 ) );
82 mMesh->setYZMeshResolution( QSize( 2, 2 ) );
84 addComponent(
mMesh );
93 , mLoadedTexture( new
Qt3DRender::QTextureLoader( parent ) )
94 , mGlShader( new
Qt3DRender::QShaderProgram( this ) )
96 mLoadedTexture->setGenerateMipMaps(
false );
97 mGlShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/skybox.vert" ) ) ) );
98 mGlShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/hdr_skybox.frag" ) ) ) );
107void QgsPanoramicSkyboxEntity::reloadTexture()
109 mLoadedTexture->setSource( QUrl::fromUserInput( mTexturePath ) );
116 , mGlShader( new
Qt3DRender::QShaderProgram() )
117 , mCubeMap( new
Qt3DRender::QTextureCubeMap( this ) )
120 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapPositiveX] = posX;
121 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapPositiveY] = posY;
122 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapPositiveZ] = posZ;
123 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapNegativeX] = negX;
124 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapNegativeY] = negY;
125 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapNegativeZ] = negZ;
129void QgsCubeFacesSkyboxEntity::init()
131 mGlShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/skybox.vert" ) ) ) );
132 mGlShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/skybox.frag" ) ) ) );
135 mCubeMap->setMagnificationFilter( Qt3DRender::QTextureCubeMap::Linear );
136 mCubeMap->setMinificationFilter( Qt3DRender::QTextureCubeMap::Linear );
137 mCubeMap->setGenerateMipMaps(
false );
138 mCubeMap->setWrapMode( Qt3DRender::QTextureWrapMode( Qt3DRender::QTextureWrapMode::Repeat ) );
140 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapPositiveX] = QString();
141 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapPositiveY] = QString();
142 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapPositiveZ] = QString();
143 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapNegativeX] = QString();
144 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapNegativeY] = QString();
145 mCubeFacesPaths[Qt3DRender::QTextureCubeMap::CubeMapNegativeZ] = QString();
151void QgsCubeFacesSkyboxEntity::reloadTexture()
153 for ( Qt3DRender::QAbstractTextureImage *textureImage : mFacesTextureImages )
155 mCubeMap->removeTextureImage( textureImage );
158 mFacesTextureImages.clear();
160 for (
auto it = mCubeFacesPaths.begin(); it != mCubeFacesPaths.end(); ++it )
162 const Qt3DRender::QTextureCubeMap::CubeMapFace face = it.key();
163 const QString texturePath = it.value();
164 Qt3DRender::QTextureImage *image =
new Qt3DRender::QTextureImage(
this );
165 image->setFace( face );
166 image->setMirrored(
false );
167 image->setSource( QUrl::fromUserInput( texturePath ) );
168 mCubeMap->addTextureImage( image );
169 mFacesTextureImages.push_back( image );
QgsCubeFacesSkyboxEntity(const QString &posX, const QString &posY, const QString &posZ, const QString &negX, const QString &negY, const QString &negZ, Qt3DCore::QNode *parent=nullptr)
Constructs a skybox from 6 different images.
QgsPanoramicSkyboxEntity(const QString &texturePath, Qt3DCore::QNode *parent=nullptr)
Construct a skybox from a panoramic 360 image.
QString texturePath() const
Returns the path of the current texture in use.
QgsSkyboxEntity(QNode *parent=nullptr)
Constructor.
Qt3DRender::QRenderPass * mGl3RenderPass
Qt3DRender::QParameter * mGammaStrengthParameter
Qt3DRender::QFilterKey * mFilterKey
Qt3DRender::QEffect * mEffect
Qt3DExtras::QCuboidMesh * mMesh
Qt3DRender::QParameter * mTextureParameter
Qt3DRender::QMaterial * mMaterial
Qt3DRender::QTechnique * mGl3Technique