Skip to content

Commit

Permalink
qgsmesh3dmaterial: Allow to change culling mode
Browse files Browse the repository at this point in the history
This is achieved by adding a `cullingMode` parameter to
`QgsMesh3DSymbol`.
  • Loading branch information
ptitjano authored and nyalldawson committed Oct 6, 2023
1 parent 66a8120 commit 0dcecc2
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/3d/mesh/qgsmesh3dmaterial_p.cpp
Expand Up @@ -35,6 +35,7 @@
#include <QByteArray>

#include "qgsmeshlayer.h"
#include "qgs3dutils.h"
#include "qgsmeshlayerutils.h"
#include "qgstriangularmesh.h"

Expand Down Expand Up @@ -171,6 +172,10 @@ void QgsMesh3DMaterial::configure()
Qt3DRender::QRenderPass *renderPass = new Qt3DRender::QRenderPass();
Qt3DRender::QShaderProgram *shaderProgram = new Qt3DRender::QShaderProgram();

Qt3DRender::QCullFace *cullingFace = new Qt3DRender::QCullFace();
cullingFace->setMode( Qgs3DUtils::qt3DcullingMode( mSymbol->cullingMode() ) );
renderPass->addRenderState( cullingFace );

//Load shader programs
const QUrl urlVert( QStringLiteral( "qrc:/shaders/mesh/mesh.vert" ) );
shaderProgram->setShaderCode( Qt3DRender::QShaderProgram::Vertex, Qt3DRender::QShaderProgram::loadSource( urlVert ) );
Expand Down
13 changes: 13 additions & 0 deletions src/3d/symbols/qgsmesh3dsymbol.cpp
Expand Up @@ -14,6 +14,7 @@
***************************************************************************/

#include "qgsmesh3dsymbol.h"
#include "qgs3dtypes.h"
#include "qgssymbollayerutils.h"
#include "qgs3dutils.h"
#include "qgsphongmaterialsettings.h"
Expand All @@ -34,6 +35,7 @@ QgsMesh3DSymbol *QgsMesh3DSymbol::clone() const
result->mHeight = mHeight;
result->mMaterialSettings.reset( mMaterialSettings->clone() );
result->mAddBackFaces = mAddBackFaces;
result->mCullingMode = mCullingMode;
result->mEnabled = mEnabled;
result->mSmoothedTriangles = mSmoothedTriangles;
result->mWireframeEnabled = mWireframeEnabled;
Expand Down Expand Up @@ -73,6 +75,7 @@ void QgsMesh3DSymbol::writeXml( QDomElement &elem, const QgsReadWriteContext &co
//Advanced symbol
QDomElement elemAdvancedSettings = doc.createElement( QStringLiteral( "advanced-settings" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "renderer-3d-enabled" ), mEnabled ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "culling-mode" ), Qgs3DUtils::cullingModeToString( mCullingMode ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "smoothed-triangle" ), mSmoothedTriangles ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "wireframe-enabled" ), mWireframeEnabled ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "wireframe-line-width" ), mWireframeLineWidth );
Expand Down Expand Up @@ -110,6 +113,7 @@ void QgsMesh3DSymbol::readXml( const QDomElement &elem, const QgsReadWriteContex
//Advanced symbol
const QDomElement elemAdvancedSettings = elem.firstChildElement( QStringLiteral( "advanced-settings" ) );
mEnabled = elemAdvancedSettings.attribute( QStringLiteral( "renderer-3d-enabled" ) ).toInt();
mCullingMode = Qgs3DUtils::cullingModeFromString( elemAdvancedSettings.attribute( QStringLiteral( "culling-mode" ), QStringLiteral( "back" ) ) );
mSmoothedTriangles = elemAdvancedSettings.attribute( QStringLiteral( "smoothed-triangle" ) ).toInt();
mWireframeEnabled = elemAdvancedSettings.attribute( QStringLiteral( "wireframe-enabled" ) ).toInt();
mWireframeLineWidth = elemAdvancedSettings.attribute( QStringLiteral( "wireframe-line-width" ) ).toDouble();
Expand Down Expand Up @@ -292,6 +296,15 @@ void QgsMesh3DSymbol::setEnabled( bool enabled )
mEnabled = enabled;
}

Qgs3DTypes::CullingMode QgsMesh3DSymbol::cullingMode() const
{
return mCullingMode;
}

void QgsMesh3DSymbol::setCullingMode( const Qgs3DTypes::CullingMode &mode )
{
mCullingMode = mode;
}

QgsAbstractMaterialSettings *QgsMesh3DSymbol::materialSettings() const
{
Expand Down
16 changes: 16 additions & 0 deletions src/3d/symbols/qgsmesh3dsymbol.h
Expand Up @@ -96,6 +96,20 @@ class _3D_EXPORT QgsMesh3DSymbol : public QgsAbstract3DSymbol
*/
void setEnabled( bool enabled );

/**
* Returns culling mode
*
* \since QGIS 3.34
*/
Qgs3DTypes::CullingMode cullingMode() const;

/**
* Sets culling mode
*
* \since QGIS 3.34
*/
void setCullingMode( const Qgs3DTypes::CullingMode &mode );

//! Returns method that determines altitude (whether to clamp to feature to terrain)
Qgis::AltitudeClamping altitudeClamping() const { return mAltClamping; }
//! Sets method that determines altitude (whether to clamp to feature to terrain)
Expand Down Expand Up @@ -352,6 +366,8 @@ class _3D_EXPORT QgsMesh3DSymbol : public QgsAbstract3DSymbol

bool mEnabled = true;

Qgs3DTypes::CullingMode mCullingMode = Qgs3DTypes::NoCulling;

//! Triangles settings
bool mSmoothedTriangles = false;
bool mWireframeEnabled = false;
Expand Down

0 comments on commit 0dcecc2

Please sign in to comment.