QGIS API Documentation 4.1.0-Master (659fe69c07c)
Loading...
Searching...
No Matches
qgsmetalroughmaterial.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmetalroughmaterial.h
3 --------------------------------------
4 Date : December 2023
5 Copyright : (C) 2023 by Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
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 QGSMETALROUGHMATERIAL_H
17#define QGSMETALROUGHMATERIAL_H
18
19#include "qgis.h"
20#include "qgis_3d.h"
21#include "qgsmaterial.h"
22
23#include <QObject>
24
25#define SIP_NO_FILE
26
27class QMatrix4x4;
28
29
30// adapted from Qt's qmetalroughmaterial.h
31namespace Qt3DRender
32{
33
34 class QFilterKey;
35 class QEffect;
36 class QAbstractTexture;
37 class QTechnique;
38 class QParameter;
39 class QShaderProgram;
40 class QShaderProgramBuilder;
41 class QRenderPass;
42
43} // namespace Qt3DRender
44
46
52class _3D_EXPORT QgsMetalRoughMaterial : public QgsMaterial
53{
54 Q_OBJECT
55 public:
59 explicit QgsMetalRoughMaterial( Qt3DCore::QNode *parent = nullptr );
60 ~QgsMetalRoughMaterial() override;
61
62 public slots:
64 void setBaseColor( const QColor &baseColor );
65
71 void setBaseColorTexture( Qt3DRender::QAbstractTexture *baseColor );
72
74 void setMetalness( float metalness );
75
77 void setMetalnessTexture( Qt3DRender::QAbstractTexture *metalness );
78
80 void setRoughness( float roughness );
81
83 void setRoughnessTexture( Qt3DRender::QAbstractTexture *roughness );
84
86 void setReflectance( float reflectance );
87
89 void setAnisotropy( float anisotropy );
90
92 void setAnisotropyRotation( float rotation );
93
95 void setAmbientOcclusionTexture( Qt3DRender::QAbstractTexture *ambientOcclusion );
96
98 void setNormalTexture( Qt3DRender::QAbstractTexture *normal );
99
101 void setHeightTexture( Qt3DRender::QAbstractTexture *height );
103 void setParallaxScale( double scale );
104
110 void setEmissionTexture( Qt3DRender::QAbstractTexture *emission );
111
115 void setEmissionColor( const QColor &color );
116
118 void setEmissionFactor( double factor );
119
121 void setClearCoatFactor( float factor );
122
124 void setClearCoatRoughness( float roughness );
125
131 void setInstancingEnabled( bool enabled, Qgis::InstancedMaterialFlags flags );
132
137 void setInstancingMeshTransform( const QMatrix4x4 &transform );
138
139 void setTextureScale( float textureScale );
140 void setTextureRotation( float textureRotation );
141 void setTextureOffset( float textureOffsetX, float textureOffsetY );
142 void setFlatShadingEnabled( bool enabled );
143
144 void setOpacity( float opacity );
145
151 void setDataDefinedEnabled( bool enabled );
152
158 void setDataDefinedTextureTransformEnabled( bool enabled );
159
165 void setEnvironmentalLightingEnabled( bool enabled );
166
167 private:
168 void init();
169
170 void updateShaders();
171
172 Qt3DRender::QParameter *mBaseColorParameter = nullptr;
173 Qt3DRender::QParameter *mMetalnessParameter = nullptr;
174 Qt3DRender::QParameter *mRoughnessParameter = nullptr;
175 Qt3DRender::QParameter *mReflectanceParameter = nullptr;
176 Qt3DRender::QParameter *mAnisotropyParameter = nullptr;
177 Qt3DRender::QParameter *mAnisotropyRotationParameter = nullptr;
178 Qt3DRender::QParameter *mBaseColorMapParameter = nullptr;
179 Qt3DRender::QParameter *mMetalnessMapParameter = nullptr;
180 Qt3DRender::QParameter *mRoughnessMapParameter = nullptr;
181 Qt3DRender::QParameter *mAmbientOcclusionMapParameter = nullptr;
182 Qt3DRender::QParameter *mNormalMapParameter = nullptr;
183 Qt3DRender::QParameter *mHeightMapParameter = nullptr;
184 Qt3DRender::QParameter *mParallaxScaleParameter = nullptr;
185 Qt3DRender::QParameter *mEmissionMapParameter = nullptr;
186 Qt3DRender::QParameter *mEmissiveColorParameter = nullptr;
187 Qt3DRender::QParameter *mEmissionFactorParameter = nullptr;
188 Qt3DRender::QParameter *mClearCoatFactorParameter = nullptr;
189 Qt3DRender::QParameter *mClearCoatRoughnessParameter = nullptr;
190 Qt3DRender::QParameter *mTextureScaleParameter = nullptr;
191 Qt3DRender::QParameter *mTextureRotationParameter = nullptr;
192 Qt3DRender::QParameter *mTextureOffsetParameter = nullptr;
193 Qt3DRender::QParameter *mOpacityParameter = nullptr;
194 Qt3DRender::QEffect *mMetalRoughEffect = nullptr;
195 Qt3DRender::QTechnique *mMetalRoughGL3Technique = nullptr;
196 Qt3DRender::QRenderPass *mMetalRoughGL3RenderPass = nullptr;
197 Qt3DRender::QShaderProgram *mMetalRoughGL3Shader = nullptr;
198 Qt3DRender::QFilterKey *mFilterKey = nullptr;
199 bool mUsingBaseColorMap = false;
200 bool mUsingMetalnessMap = false;
201 bool mUsingRoughnessMap = false;
202 bool mUsingAmbientOcclusionMap = false;
203 bool mUsingNormalMap = false;
204 bool mUsingHeightMap = false;
205 bool mUsingEmissionMap = false;
206 bool mFlatShading = false;
207 bool mInstanced = false;
208 Qgis::InstancedMaterialFlags mInstanceFlags;
209 Qt3DRender::QParameter *mTransformParameter = nullptr;
210 Qt3DRender::QParameter *mNormalTransformParameter = nullptr;
211
212 bool mDataDefinedEnabled = false;
213 bool mDataDefinedTextureTransformEnabled = false;
214 bool mEnableEnvironmentalLighting = false;
215
216 friend class TestQgsGltf3DUtils;
217};
218
220
221#endif // QGSMETALROUGHMATERIAL_H
QFlags< InstancedMaterialFlag > InstancedMaterialFlags
Definition qgis.h:4398
Base class for all materials used within QGIS 3D views.
Definition qgsmaterial.h:40