diff --git a/src/3d/mesh/qgsmesh3dentity_p.cpp b/src/3d/mesh/qgsmesh3dentity_p.cpp index e89134bdba69..910e27216556 100644 --- a/src/3d/mesh/qgsmesh3dentity_p.cpp +++ b/src/3d/mesh/qgsmesh3dentity_p.cpp @@ -67,7 +67,7 @@ void QgsMeshDataset3DEntity::applyMaterial() if ( datasetGroupIndex >= 0 ) mSymbol->setColorRampShader( rendererSettings.scalarSettings( datasetGroupIndex ).colorRampShader() ); } - QgsMesh3DMaterial *material = new QgsMesh3DMaterial( layer(), mMapSettings.temporalRange(), mMapSettings.origin(), mSymbol.get(), QgsMesh3DMaterial::ScalarDataSet ); + QgsMesh3DMaterial *material = new QgsMesh3DMaterial( layer(), mMapSettings, mSymbol.get(), QgsMesh3DMaterial::ScalarDataSet ); addComponent( material ); } @@ -96,8 +96,8 @@ void QgsMesh3DTerrainTileEntity::buildGeometry() void QgsMesh3DTerrainTileEntity::applyMaterial() { QgsMesh3DMaterial *material = new QgsMesh3DMaterial( - nullptr, QgsDateTimeRange(), - mMapSettings.origin(), + nullptr, + mMapSettings, mSymbol.get(), QgsMesh3DMaterial::ZValue ); addComponent( material ); diff --git a/src/3d/mesh/qgsmesh3dmaterial_p.cpp b/src/3d/mesh/qgsmesh3dmaterial_p.cpp index 152b8244a517..441170b32a4d 100644 --- a/src/3d/mesh/qgsmesh3dmaterial_p.cpp +++ b/src/3d/mesh/qgsmesh3dmaterial_p.cpp @@ -16,6 +16,7 @@ ***************************************************************************/ #include "qgsmesh3dmaterial_p.h" +#include "qgs3dmapsettings.h" #include #include @@ -110,13 +111,12 @@ class ArrowsTextureGenerator: public Qt3DRender::QTextureImageDataGenerator QgsMesh3DMaterial::QgsMesh3DMaterial( QgsMeshLayer *layer, - const QgsDateTimeRange &timeRange, - const QgsVector3D &origin, + const Qgs3DMapSettings &mapSettings, const QgsMesh3DSymbol *symbol, MagnitudeType magnitudeType ) : mSymbol( symbol->clone() ) , mMagnitudeType( magnitudeType ) - , mOrigin( origin ) + , mOrigin( mapSettings.origin() ) { Qt3DRender::QEffect *eff = new Qt3DRender::QEffect( this ); @@ -124,7 +124,9 @@ QgsMesh3DMaterial::QgsMesh3DMaterial( QgsMeshLayer *layer, // this method has to be called even if there isn't arrows (terrain) because it configures the parameter of shaders // If all the parameters ("uniform" in shaders) are not defined in QGIS, the shaders sometimes don't work (depends on hardware?) - configureArrows( layer, timeRange ); + configureArrows( layer, mapSettings.temporalRange() ); + + Qgs3DUtils::addBoundingBoxParametersToEffect( eff, mapSettings ); eff->addTechnique( mTechnique ); setEffect( eff ); diff --git a/src/3d/mesh/qgsmesh3dmaterial_p.h b/src/3d/mesh/qgsmesh3dmaterial_p.h index 6083ba363fff..b3fc108485f5 100644 --- a/src/3d/mesh/qgsmesh3dmaterial_p.h +++ b/src/3d/mesh/qgsmesh3dmaterial_p.h @@ -24,6 +24,7 @@ #include #include +#include "qgs3dmapsettings.h" #include "qgsmesh3dsymbol.h" #include "qgsvector3d.h" @@ -41,6 +42,7 @@ #define SIP_NO_FILE class QgsMeshLayer; +class Qgs3DMapSettings; /** * \ingroup 3d @@ -71,8 +73,7 @@ class QgsMesh3DMaterial : public Qt3DRender::QMaterial //! Constructor QgsMesh3DMaterial( QgsMeshLayer *layer, - const QgsDateTimeRange &timeRange, - const QgsVector3D &origin, + const Qgs3DMapSettings &mapSettings, const QgsMesh3DSymbol *symbol, MagnitudeType magnitudeType = ZValue ); diff --git a/src/3d/shaders/mesh/mesh.vert b/src/3d/shaders/mesh/mesh.vert index c9d024dcece2..b42ee54acdd7 100644 --- a/src/3d/shaders/mesh/mesh.vert +++ b/src/3d/shaders/mesh/mesh.vert @@ -16,6 +16,8 @@ out MeshVertex { float magnitude; } vs_out; +#pragma include ../clipplane.inc + void main() { gl_Position = mvp * vec4( vertexPosition, 1.0 ); @@ -28,4 +30,6 @@ void main() vs_out.magnitude=scalarMagnitude; else vs_out.magnitude=worldPosition.y; + + setClipDistance(worldPosition); }