Qt 5.11 | Qt 3D | C++ Classes | QMaterial

Qt 5.11.3 Reference Documentation

# QMaterial Class

(Qt3DRender::QMaterial)

Provides an abstract class that should be the base of all material component classes in a scene. More...

Header: | #include <QMaterial>
qmake: | QT += 3drender
Since: | Qt 5.5
Instantiated By: | Material
Inherits: | Qt3DCore::QComponent

Inherited By:

Qt3DExtras::QDiffuseMapMaterial, Qt3DExtras::QDiffuseSpecularMapMaterial, Qt3DExtras::QDiffuseSpecularMaterial, Qt3DExtras::QGoochMaterial, Qt3DExtras::QMetalRoughMaterial, Qt3DExtras::QMorphPhongMaterial, Qt3DExtras::QNormalDiffuseMapMaterial, Qt3DExtras::QNormalDiffuseSpecularMapMaterial, Qt3DExtras::QPerVertexColorMaterial, Qt3DExtras::QPhongAlphaMaterial, Qt3DExtras::QPhongMaterial, and Qt3DExtras::QTextureMaterial

- List of all members, including inherited members

## Properties

- effect : Qt3DRender::QEffect*

- 1 property inherited from Qt3DCore::QComponent
- 3 properties inherited from Qt3DCore::QNode

## Public Functions

| QMaterial(Qt3DCore::QNode *parent = nullptr)
virtual | ~QMaterial()
void | addParameter(Qt3DRender::QParameter *parameter)
Qt3DRender::QEffect * | effect() const
QVector<Qt3DRender::QParameter *> | parameters() const
void | removeParameter(Qt3DRender::QParameter *parameter)

- 2 public functions inherited from Qt3DCore::QComponent
- 13 public functions inherited from Qt3DCore::QNode

## Public Slots

void | setEffect(Qt3DRender::QEffect *effect)

- 1 public slot inherited from Qt3DCore::QComponent
- 3 public slots inherited from Qt3DCore::QNode

## Signals

void | effectChanged(Qt3DRender::QEffect *effect)

- 3 signals inherited from Qt3DCore::QComponent
- 4 signals inherited from Qt3DCore::QNode

### Additional Inherited Members

- 2 protected functions inherited from Qt3DCore::QNode

## Detailed Description

Provides an abstract class that should be the base of all material component classes in a scene.

QMaterial provides a way to specify the rendering of an entity. Any aspect can define its own subclass of QMaterial so that a Material can be used to describe a visual element; for example, the way sound should reflect off an element, the temperature of a surface, and so on.

In itself, a QMaterial doesn't do anything. It's only when it references a QEffect node that a QMaterial becomes useful.

In practice, it often happens that a single QEffect is being referenced by several QMaterial components. This allows to only create the effect, techniques, passes and shaders once while allowing to specify the material by adding QParameter instances.

A QParameter defined on a QMaterial is overridden by a QParameter (of the same name) defined in a QTechniqueFilter or a QRenderPassFilter.

      QMaterial *material1 = new QMaterial();
      QMaterial *material2 = new QMaterial();

      // Create effect, technique, render pass and shader
      QEffect *effect = new QEffect();
      QTechnique *gl3Technique = new QTechnique();
      QRenderPass *gl3Pass = new QRenderPass();
      QShaderProgram *glShader = new QShaderProgram();

      // Set the shader on the render pass
      gl3Pass->setShaderProgram(glShader);

      // Add the pass to the technique
      gl3Technique->addRenderPass(gl3Pass);

      // Set the targeted GL version for the technique
      gl3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
      gl3Technique->graphicsApiFilter()->setMajorVersion(3);
      gl3Technique->graphicsApiFilter()->setMinorVersion(1);
      gl3Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::CoreProfile);

      // Add the technique to the effect
      effect->addTechnique(gl3Technique);

      // Set the effect on the materials
      material1->setEffect(effect);
      material2->setEffect(effect);

      // Set different parameters on the materials
      const QString parameterName = QStringLiteral("color");
      material1->addParameter(new QParameter(parameterName, QColor::fromRgbF(0.0f, 1.0f, 0.0f, 1.0f);
      material2->addParameter(new QParameter(parameterName, QColor::fromRgbF(1.0f, 1.0f, 1.0f, 1.0f);

See also QEffect, QTechnique, and QParameter.

## Property Documentation

### effect : Qt3DRender::QEffect*

Specifies the effect to be used with the material.

Access functions:

Qt3DRender::QEffect * | effect() const
void | setEffect(Qt3DRender::QEffect *effect)

Notifier signal:

void | effectChanged(Qt3DRender::QEffect *effect)

## Member Function Documentation

### QMaterial::QMaterial(Qt3DCore::QNode *parent = nullptr)

Default constructs an instance of QMaterial.

### `[virtual]` QMaterial::~QMaterial()

Destroys the instance of QMaterial. The destructor is virtual.

### void QMaterial::addParameter(Qt3DRender::QParameter *parameter)

Add a parameter to the material's parameters.

### QVector<Qt3DRender::QParameter *> QMaterial::parameters() const

Returns a vector of the material's current parameters

### void QMaterial::removeParameter(Qt3DRender::QParameter *parameter)

Remove a parameter from the material's parameters.