22#include <Qt3DRender/QEffect>
23#include <Qt3DRender/QGraphicsApiFilter>
24#include <Qt3DRender/QParameter>
25#include <Qt3DRender/QTechnique>
27#include "moc_qgsphongtexturedmaterial.cpp"
29using namespace Qt::StringLiterals;
32QgsPhongTexturedMaterial::QgsPhongTexturedMaterial( QNode *parent )
34 , mAmbientParameter( new
Qt3DRender::QParameter( u
"ambientColor"_s, QVariant() ) )
35 , mDiffuseTextureParameter( new
Qt3DRender::QParameter( u
"diffuseTexture"_s, QVariant() ) )
36 , mDiffuseTextureScaleParameter( new
Qt3DRender::QParameter( u
"texCoordScale"_s, 1.0f ) )
37 , mDiffuseTextureRotationParameter( new
Qt3DRender::QParameter( u
"texCoordRotation"_s, 0.0f ) )
38 , mSpecularParameter( new
Qt3DRender::QParameter( u
"specularColor"_s, QVariant() ) )
39 , mShininessParameter( new
Qt3DRender::QParameter( u
"shininess"_s, 150.0f ) )
40 , mOpacityParameter( new
Qt3DRender::QParameter( u
"opacity"_s, 1.0f ) )
42 setAmbient( QColor::fromRgbF( 0.05f, 0.05f, 0.05f, 1.0f ) );
43 setSpecular( QColor::fromRgbF( 0.01f, 0.01f, 0.01f, 1.0f ) );
47QgsPhongTexturedMaterial::~QgsPhongTexturedMaterial() =
default;
50void QgsPhongTexturedMaterial::init()
52 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect();
53 effect->addParameter( mAmbientParameter );
54 effect->addParameter( mDiffuseTextureParameter );
55 effect->addParameter( mDiffuseTextureScaleParameter );
56 effect->addParameter( mDiffuseTextureRotationParameter );
57 effect->addParameter( mSpecularParameter );
58 effect->addParameter( mShininessParameter );
59 effect->addParameter( mOpacityParameter );
61 Qt3DRender::QShaderProgram *gL3Shader =
new Qt3DRender::QShaderProgram();
63 const QByteArray vertexShaderCode = Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/default.vert"_s ) );
65 gL3Shader->setVertexShaderCode( finalVertexShaderCode );
67 gL3Shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/diffuseSpecular.frag"_s ) ) );
69 Qt3DRender::QTechnique *gL3Technique =
new Qt3DRender::QTechnique();
70 gL3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
71 gL3Technique->graphicsApiFilter()->setMajorVersion( 3 );
72 gL3Technique->graphicsApiFilter()->setMinorVersion( 1 );
73 gL3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
75 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey(
this );
76 filterKey->setName( u
"renderingStyle"_s );
77 filterKey->setValue( u
"forward"_s );
79 gL3Technique->addFilterKey( filterKey );
81 Qt3DRender::QRenderPass *gL3RenderPass =
new Qt3DRender::QRenderPass();
82 gL3RenderPass->setShaderProgram( gL3Shader );
83 gL3Technique->addRenderPass( gL3RenderPass );
84 effect->addTechnique( gL3Technique );
89void QgsPhongTexturedMaterial::setAmbient(
const QColor &ambient )
94void QgsPhongTexturedMaterial::setDiffuseTexture( Qt3DRender::QAbstractTexture *diffuseTexture )
96 mDiffuseTextureParameter->setValue( QVariant::fromValue( diffuseTexture ) );
99void QgsPhongTexturedMaterial::setDiffuseTextureScale(
float diffuseTextureScale )
101 mDiffuseTextureScaleParameter->setValue( diffuseTextureScale );
104void QgsPhongTexturedMaterial::setDiffuseTextureRotation(
float textureRotation )
106 mDiffuseTextureRotationParameter->setValue( textureRotation );
109void QgsPhongTexturedMaterial::setSpecular(
const QColor &specular )
114void QgsPhongTexturedMaterial::setShininess(
float shininess )
116 mShininessParameter->setValue( shininess );
119void QgsPhongTexturedMaterial::setOpacity(
float opacity )
121 mOpacityParameter->setValue( opacity );
static QByteArray addDefinesToShaderCode(const QByteArray &shaderCode, const QStringList &defines)
Inserts some define macros into a shader source code.
static QColor srgbToLinear(const QColor &color)
Converts a SRGB color to a linear color.
Base class for all materials used within QGIS 3D views.