22 #include <Qt3DExtras/QDiffuseSpecularMaterial> 
   23 #include <Qt3DExtras/QPhongMaterial> 
   24 #include <Qt3DRender/QPaintedTextureImage> 
   25 #include <Qt3DRender/QTexture> 
   26 #include <Qt3DRender/QParameter> 
   27 #include <Qt3DRender/QEffect> 
   33   return QStringLiteral( 
"phongtextured" );
 
   66   return mTextureRotation;
 
   73   mShininess = elem.attribute( QStringLiteral( 
"shininess" ) ).toFloat();
 
   74   mDiffuseTexturePath = elem.attribute( QStringLiteral( 
"diffuse_texture_path" ), QString() );
 
   75   mTextureScale = elem.attribute( QStringLiteral( 
"texture_scale" ), QString( 
"1.0" ) ).toFloat();
 
   76   mTextureRotation = elem.attribute( QStringLiteral( 
"texture-rotation" ), QString( 
"0.0" ) ).toFloat();
 
   85   elem.setAttribute( QStringLiteral( 
"shininess" ), mShininess );
 
   86   elem.setAttribute( QStringLiteral( 
"diffuse_texture_path" ), mDiffuseTexturePath );
 
   87   elem.setAttribute( QStringLiteral( 
"texture_scale" ), mTextureScale );
 
   88   elem.setAttribute( QStringLiteral( 
"texture-rotation" ), mTextureRotation );
 
  105       bool fitsInCache = 
false;
 
  109       if ( !textureSourceImage.isNull() )
 
  112         Qt3DExtras::QDiffuseSpecularMaterial *material = 
new Qt3DExtras::QDiffuseSpecularMaterial;
 
  114         Qt3DRender::QTexture2D *texture = 
new Qt3DRender::QTexture2D();
 
  115         texture->addTextureImage( textureImage );
 
  117         texture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::Repeat );
 
  118         texture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::Repeat );
 
  119         texture->wrapMode()->setZ( Qt3DRender::QTextureWrapMode::Repeat );
 
  121         texture->setSamples( 4 );
 
  123         texture->setGenerateMipMaps( 
true );
 
  124         texture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
 
  125         texture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
 
  127         material->setDiffuse( QVariant::fromValue( texture ) );
 
  129         material->setSpecular( mSpecular );
 
  130         material->setAmbient( mAmbient );
 
  131         material->setShininess( mShininess );
 
  132         material->setTextureScale( mTextureScale );
 
  146         Qt3DExtras::QPhongMaterial *material  = 
new Qt3DExtras::QPhongMaterial;
 
  147         material->setAmbient( mAmbient );
 
  148         material->setSpecular( mSpecular );
 
  149         material->setShininess( mShininess );
 
  170   QMap<QString, QString> parameters;
 
  171   parameters[ QStringLiteral( 
"Ka" ) ] = QStringLiteral( 
"%1 %2 %3" ).arg( mAmbient.redF() ).arg( mAmbient.greenF() ).arg( mAmbient.blueF() );
 
  172   parameters[ QStringLiteral( 
"Ks" ) ] = QStringLiteral( 
"%1 %2 %3" ).arg( mSpecular.redF() ).arg( mSpecular.greenF() ).arg( mSpecular.blueF() );
 
  173   parameters[ QStringLiteral( 
"Ns" ) ] = QString::number( mShininess );
 
  179   Qt3DRender::QParameter *ambientParameter = 
new Qt3DRender::QParameter( QStringLiteral( 
"ka" ), QColor::fromRgbF( 0.05f, 0.05f, 0.05f, 1.0f ) );
 
  180   Qt3DRender::QParameter *specularParameter = 
new Qt3DRender::QParameter( QStringLiteral( 
"ks" ), QColor::fromRgbF( 0.01f, 0.01f, 0.01f, 1.0f ) );
 
  181   Qt3DRender::QParameter *shininessParameter = 
new Qt3DRender::QParameter( QStringLiteral( 
"shininess" ), 150.0f );
 
  183   ambientParameter->setValue( mAmbient );
 
  184   specularParameter->setValue( mSpecular );
 
  185   shininessParameter->setValue( mShininess );
 
  187   effect->addParameter( ambientParameter );
 
  188   effect->addParameter( specularParameter );
 
  189   effect->addParameter( shininessParameter );
 
virtual void writeXml(QDomElement &element, const QgsReadWriteContext &) const
Writes settings to a DOM element.
virtual void readXml(const QDomElement &element, const QgsReadWriteContext &)
Reads settings from a DOM element.
static QgsImageCache * imageCache()
Returns the application's image cache, used for caching resampled versions of raster images.
QImage pathAsImage(const QString &path, const QSize size, const bool keepAspectRatio, const double opacity, bool &fitsInCache, bool blocking=false, bool *isMissing=nullptr)
Returns the specified path rendered as an image.
Holds an image that can be used as a texture in the 3D view.
QColor selectionColor() const
Returns the color for representing materials in a selected state.
bool isSelected() const
Returns true if the material should represent a selected state.
QgsPhongTexturedMaterialSettings()=default
Constructor for QgsPhongTexturedMaterialSettings.
void addParametersToEffect(Qt3DRender::QEffect *effect) const override
Adds parameters from the material to a destination effect.
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
Writes settings to a DOM element.
float textureRotation() const
Returns the texture rotation, in degrees.
QString type() const override
Returns the unique type name for the material.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
Reads settings from a DOM element.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Phong material.
QgsPhongTexturedMaterialSettings * clone() const override
Clones the material settings.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsPhongTexturedMaterialSettings.
QMap< QString, QString > toExportParameters() const override
Returns the parameters to be exported to .mtl file.
Qt3DRender::QMaterial * toMaterial(QgsMaterialSettingsRenderingTechnique technique, const QgsMaterialContext &context) const override
Creates a new QMaterial object representing the material settings.
The class is used as a container of context for various read/write operations on other objects.
static QColor decodeColor(const QString &str)
static QString encodeColor(const QColor &color)
QgsMaterialSettingsRenderingTechnique
Material rendering techniques 3.
@ Points
Point based rendering, requires point data.
@ Triangles
Triangle based rendering (default)
@ TrianglesFromModel
Triangle based rendering, using a model object source.
@ Lines
Line based rendering, requires line data.
@ TrianglesDataDefined
Triangle based rendering with possibility of datadefined color.
@ InstancedPoints
Instanced based rendering, requiring triangles and point data.
@ TrianglesWithFixedTexture
Triangle based rendering, using a fixed, non-user-configurable texture (e.g. for terrain rendering)