20#include <Qt3DRender/QEffect>
21#include <Qt3DRender/QGraphicsApiFilter>
22#include <Qt3DRender/QParameter>
23#include <Qt3DRender/QTechnique>
25#include "moc_qgsphongtexturedmaterial.cpp"
27using namespace Qt::StringLiterals;
30QgsPhongTexturedMaterial::QgsPhongTexturedMaterial( QNode *parent )
32 , mAmbientParameter( new
Qt3DRender::QParameter( u
"ambientColor"_s, QColor::fromRgbF( 0.05f, 0.05f, 0.05f, 1.0f ) ) )
33 , mDiffuseTextureParameter( new
Qt3DRender::QParameter( u
"diffuseTexture"_s, QVariant() ) )
34 , mDiffuseTextureScaleParameter( new
Qt3DRender::QParameter( u
"texCoordScale"_s, 1.0f ) )
35 , mSpecularParameter( new
Qt3DRender::QParameter( u
"specularColor"_s, QColor::fromRgbF( 0.01f, 0.01f, 0.01f, 1.0f ) ) )
36 , mShininessParameter( new
Qt3DRender::QParameter( u
"shininess"_s, 150.0f ) )
37 , mOpacityParameter( new
Qt3DRender::QParameter( u
"opacity"_s, 1.0f ) )
42QgsPhongTexturedMaterial::~QgsPhongTexturedMaterial() =
default;
45void QgsPhongTexturedMaterial::init()
47 connect( mAmbientParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsPhongTexturedMaterial::handleAmbientChanged );
48 connect( mDiffuseTextureParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsPhongTexturedMaterial::handleDiffuseTextureChanged );
49 connect( mDiffuseTextureScaleParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsPhongTexturedMaterial::handleDiffuseTextureScaleChanged );
50 connect( mSpecularParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsPhongTexturedMaterial::handleSpecularChanged );
51 connect( mShininessParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsPhongTexturedMaterial::handleShininessChanged );
52 connect( mOpacityParameter, &Qt3DRender::QParameter::valueChanged,
this, &QgsPhongTexturedMaterial::handleOpacityChanged );
54 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect();
55 effect->addParameter( mAmbientParameter );
56 effect->addParameter( mDiffuseTextureParameter );
57 effect->addParameter( mDiffuseTextureScaleParameter );
58 effect->addParameter( mSpecularParameter );
59 effect->addParameter( mShininessParameter );
60 effect->addParameter( mOpacityParameter );
62 Qt3DRender::QShaderProgram *gL3Shader =
new Qt3DRender::QShaderProgram();
63 gL3Shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/default.vert"_s ) ) );
64 gL3Shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/diffuseSpecular.frag"_s ) ) );
66 Qt3DRender::QTechnique *gL3Technique =
new Qt3DRender::QTechnique();
67 gL3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
68 gL3Technique->graphicsApiFilter()->setMajorVersion( 3 );
69 gL3Technique->graphicsApiFilter()->setMinorVersion( 1 );
70 gL3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
72 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey(
this );
73 filterKey->setName( u
"renderingStyle"_s );
74 filterKey->setValue( u
"forward"_s );
76 gL3Technique->addFilterKey( filterKey );
78 Qt3DRender::QRenderPass *gL3RenderPass =
new Qt3DRender::QRenderPass();
79 gL3RenderPass->setShaderProgram( gL3Shader );
80 gL3Technique->addRenderPass( gL3RenderPass );
81 effect->addTechnique( gL3Technique );
86void QgsPhongTexturedMaterial::setAmbient(
const QColor &ambient )
88 mAmbientParameter->setValue( ambient );
91void QgsPhongTexturedMaterial::setDiffuseTexture( Qt3DRender::QAbstractTexture *diffuseTexture )
93 mDiffuseTextureParameter->setValue( QVariant::fromValue( diffuseTexture ) );
96void QgsPhongTexturedMaterial::setDiffuseTextureScale(
float diffuseTextureScale )
98 mDiffuseTextureScaleParameter->setValue( diffuseTextureScale );
101void QgsPhongTexturedMaterial::setSpecular(
const QColor &specular )
103 mSpecularParameter->setValue( specular );
106void QgsPhongTexturedMaterial::setShininess(
float shininess )
108 mShininessParameter->setValue( shininess );
111void QgsPhongTexturedMaterial::setOpacity(
float opacity )
113 mOpacityParameter->setValue( opacity );
116QColor QgsPhongTexturedMaterial::ambient()
const
118 return mAmbientParameter->value().value<QColor>();
121Qt3DRender::QAbstractTexture *QgsPhongTexturedMaterial::diffuseTexture()
const
123 return mDiffuseTextureParameter->value().value<Qt3DRender::QAbstractTexture *>();
126float QgsPhongTexturedMaterial::diffuseTextureScale()
const
128 return mDiffuseTextureScaleParameter->value().toFloat();
131QColor QgsPhongTexturedMaterial::specular()
const
133 return mSpecularParameter->value().value<QColor>();
136float QgsPhongTexturedMaterial::shininess()
const
138 return mShininessParameter->value().toFloat();
141float QgsPhongTexturedMaterial::opacity()
const
143 return mOpacityParameter->value().toFloat();
146void QgsPhongTexturedMaterial::handleAmbientChanged(
const QVariant &var )
148 emit ambientChanged( var.value<QColor>() );
151void QgsPhongTexturedMaterial::handleDiffuseTextureChanged(
const QVariant &var )
153 emit diffuseTextureChanged( var.value<Qt3DRender::QAbstractTexture *>() );
156void QgsPhongTexturedMaterial::handleDiffuseTextureScaleChanged(
const QVariant &var )
158 emit diffuseTextureScaleChanged( var.toFloat() );
161void QgsPhongTexturedMaterial::handleSpecularChanged(
const QVariant &var )
163 emit specularChanged( var.value<QColor>() );
166void QgsPhongTexturedMaterial::handleShininessChanged(
const QVariant &var )
168 emit shininessChanged( var.toFloat() );
171void QgsPhongTexturedMaterial::handleOpacityChanged(
const QVariant &var )
173 emit opacityChanged( var.toFloat() );
Base class for all materials used within QGIS 3D views.