Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3D] add support for gl_clipdistance + scene rotation (part 2) #58051

Closed
wants to merge 40 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
268e2f9
qgsabstractmaterialsettings: Add mapSettings parameter to toMaterial
ptitjano May 23, 2024
bc19fab
qgsphongmaterialsettings: Use default vertex for the constant case
ptitjano May 28, 2024
7ea241f
qgsmetalroughmaterial: Move add addDefinesToShaderCode to Qgs3DUtils
ptitjano May 17, 2024
87dad15
qgsphongmaterialsettings: Merge datadefined and constant cases
ptitjano May 27, 2024
e6d7379
qgsgoochmaterialsettings: Merge datadefined and constant cases
ptitjano May 27, 2024
e51eb79
qgsphongtexturedmaterialsettings: Use default.vert vertex
ptitjano Jun 24, 2024
c1d16c1
qgsmetalroughmaterial: Add qgs3dmapsettings parameter
ptitjano May 27, 2024
34e88e8
3d: Introduce QgsTextureMaterial
ptitjano Mar 19, 2024
4be6e52
3d: Introduce QgsDiffuseSpecularMaterial
ptitjano Mar 19, 2024
f48b6b4
terrain: use QgsTextureMaterial and QgsDiffuseSpecularMaterial
ptitjano Jun 24, 2024
e0b0c65
qgsframegraph: Add clip planes
ptitjano Jun 7, 2024
7c161d8
3d: Add support for gl_ClipDistance in the default vertex shader file
ptitjano Jun 7, 2024
d29b940
qgsdemterraintileloader: Simplify createTextureComponent signature
ptitjano Jun 24, 2024
f39e189
qgsdiffusespecularmaterial: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
d54610c
qgstexturematerial: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
403762f
phongDataDefined: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
9f933b4
goochDataDefined: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
f0b289f
qgssimplelinematerialsettings: Add support for gl_ClipDistance
ptitjano May 27, 2024
3ca8205
qgsinstancedpoint3d: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
e58c189
qgspointcloud3dsymbol: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
0bb1e81
qgsmesh3dmaterial: Add support for gl_ClipDistance
ptitjano Jun 24, 2024
aac7640
qgs3dmapconfigwidget: Use settings extent to compute the zoom level
ptitjano Jul 10, 2024
92f14f8
qgs3dmapsettings: Regroup logic to update terrain generator extent
ptitjano May 23, 2024
49950c2
qgs3dmapsettings: Introduce default min/max depth parameter
ptitjano Jul 5, 2024
6f6a711
qgsmatrix4x4: Add support for rotation
ptitjano Jul 2, 2024
ebf7807
qgsvector3d: Add support for minus operator
ptitjano Jul 2, 2024
c75dab2
qgsorientedbox3d: Add a method to compute rotation angles
ptitjano Jul 3, 2024
849ce7e
qgs3dmapsettings: Store scene extent in an oriented box
ptitjano Mar 10, 2023
02e4298
qgs3dmapcanvaswidget: Add support for box in onExtentChanged
ptitjano Jul 10, 2024
fe52b6a
qgs3dutils: Add support for box in addBoundingBoxParametersToEffect
ptitjano Jun 7, 2024
dae2a8e
3d: Use a new widget for extent definition
ptitjano Aug 17, 2023
478a64e
qgs3dutils: Factor out logic to compute rotated oriented box
ptitjano Jul 5, 2024
b124157
qgs3dmapconfigwidget: Add support for z rotation
ptitjano Mar 10, 2023
7cf3747
testqgs3drendering: Add unit test for flat terrain with scene rotation
ptitjano Jul 6, 2024
823c488
testqgs3drendering: Add unit test for vector data with scene rotation
ptitjano Jul 4, 2024
ee748dc
testqgspointcloud3drendering: Add a unit test with scene rotation
ptitjano Jul 4, 2024
5e0133e
testqgsmesh3drendering: Add a unit test with scene rotation
ptitjano Jul 6, 2024
de942d9
qgs3dmapcanvaswidget: Give a proper name to Qgs3DMapConfigWidget var
ptitjano Aug 18, 2023
0cc4d6e
qgs3dmapconfigwidget: Factor out logic to update the terrain from apply
ptitjano Jul 5, 2024
583ead4
qgs3dmapconfigwidget: Live extent change
ptitjano Aug 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
qgsdiffusespecularmaterial: Add support for gl_ClipDistance
This is achieved with two changes:
1. define the plane equation as uniform with the
`Qgs3DUtils::addBoundingBoxParametersToEffect` call
2. include `clipplane.inc` file in the vertex shader file and call
setClipDistance()

With these changes, the planes defined in the framegraph are used.
ptitjano committed Jul 12, 2024
commit f39e1891618bf057f14f95ba38ca4ae658cac857
8 changes: 5 additions & 3 deletions src/3d/materials/qgsdiffusespecularmaterial.cpp
Original file line number Diff line number Diff line change
@@ -24,10 +24,11 @@
#include <Qt3DRender/QTexture>

#include "qgsdiffusespecularmaterial.h"
#include "qgs3dmapsettings.h"
#include "qgs3dutils.h"

///@cond PRIVATE
QgsDiffuseSpecularMaterial::QgsDiffuseSpecularMaterial( QNode *parent )
QgsDiffuseSpecularMaterial::QgsDiffuseSpecularMaterial( const Qgs3DMapSettings &mapSettings, QNode *parent )
: QMaterial( parent )
, mEffect( new Qt3DRender::QEffect() )
, mAmbientParameter( new Qt3DRender::QParameter( QStringLiteral( "ka" ), QColor::fromRgbF( 0.05f, 0.05f, 0.05f, 1.0f ) ) )
@@ -40,13 +41,13 @@ QgsDiffuseSpecularMaterial::QgsDiffuseSpecularMaterial( QNode *parent )
, mGL3Shader( new Qt3DRender::QShaderProgram( this ) )
, mFilterKey( new Qt3DRender::QFilterKey( this ) )
{
init();
init( mapSettings );
}

QgsDiffuseSpecularMaterial::~QgsDiffuseSpecularMaterial() = default;


void QgsDiffuseSpecularMaterial::init()
void QgsDiffuseSpecularMaterial::init( const Qgs3DMapSettings &mapSettings )
{
connect( mAmbientParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsDiffuseSpecularMaterial::handleAmbientChanged );
@@ -61,6 +62,7 @@ void QgsDiffuseSpecularMaterial::init()
mEffect->addParameter( mDiffuseParameter );
mEffect->addParameter( mSpecularParameter );
mEffect->addParameter( mShininessParameter );
Qgs3DUtils::addBoundingBoxParametersToEffect( mEffect, mapSettings );

mGL3Shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral( "qrc:/shaders/default.vert" ) ) ) );

5 changes: 3 additions & 2 deletions src/3d/materials/qgsdiffusespecularmaterial.h
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@
#define QGSDIFFUSESPECULARMATERIAL_H

#include "qgis_3d.h"
#include "qgs3dmapsettings.h"

#include <QColor>
#include <QObject>
@@ -56,7 +57,7 @@ class _3D_EXPORT QgsDiffuseSpecularMaterial : public Qt3DRender::QMaterial
/**
* Constructor for QgsDiffuseSpecularMaterial, with the specified \a parent node.
*/
explicit QgsDiffuseSpecularMaterial( Qt3DCore::QNode *parent = nullptr );
explicit QgsDiffuseSpecularMaterial( const Qgs3DMapSettings &mapSettings, Qt3DCore::QNode *parent = nullptr );
~QgsDiffuseSpecularMaterial() override;

QColor ambient() const;
@@ -77,7 +78,7 @@ class _3D_EXPORT QgsDiffuseSpecularMaterial : public Qt3DRender::QMaterial
void shininessChanged( float shininess );

private:
void init();
void init( const Qgs3DMapSettings &mapSettings );

void handleAmbientChanged( const QVariant &var );
void handleDiffuseChanged( const QVariant &var );
4 changes: 2 additions & 2 deletions src/3d/terrain/qgsterraintileloader_p.cpp
Original file line number Diff line number Diff line change
@@ -64,7 +64,7 @@ void QgsTerrainTileLoader::createTextureComponent( QgsTerrainTileEntity *entity,
{
if ( isShadingEnabled )
{
QgsDiffuseSpecularMaterial *diffuseMapMaterial = new QgsDiffuseSpecularMaterial;
QgsDiffuseSpecularMaterial *diffuseMapMaterial = new QgsDiffuseSpecularMaterial( mapSettings );
diffuseMapMaterial->setDiffuse( QVariant::fromValue( texture ) );
diffuseMapMaterial->setAmbient( shadingMaterial.ambient() );
diffuseMapMaterial->setSpecular( shadingMaterial.specular() );
@@ -80,7 +80,7 @@ void QgsTerrainTileLoader::createTextureComponent( QgsTerrainTileEntity *entity,
}
else
{
QgsDiffuseSpecularMaterial *diffuseMapMaterial = new QgsDiffuseSpecularMaterial;
QgsDiffuseSpecularMaterial *diffuseMapMaterial = new QgsDiffuseSpecularMaterial( mapSettings );
diffuseMapMaterial->setDiffuse( shadingMaterial.diffuse() );
diffuseMapMaterial->setAmbient( shadingMaterial.ambient() );
diffuseMapMaterial->setSpecular( shadingMaterial.specular() );