Qt Quick 3D - Procedural Texture Example

 // Copyright (C) 2020 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

 #ifndef GRADIENTTEXTURE_H
 #define GRADIENTTEXTURE_H

 #include <QtQuick3D/QQuick3DTextureData>

 #include <QtGui/QColor>

 class GradientTexture : public QQuick3DTextureData
 {
     Q_OBJECT
     Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
     Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
     Q_PROPERTY(QColor startColor READ startColor WRITE setStartColor NOTIFY startColorChanged)
     Q_PROPERTY(QColor endColor READ endColor WRITE setEndColor NOTIFY endColorChanged)
     QML_NAMED_ELEMENT(GradientTexture)

 public:
     GradientTexture();

     int height() const;
     int width() const;
     QColor startColor() const;
     QColor endColor() const;

 public Q_SLOTS:
     void setHeight(int height);
     void setWidth(int width);
     void setStartColor(QColor startColor);
     void setEndColor(QColor endColor);

 Q_SIGNALS:
     void heightChanged(int height);
     void widthChanged(int width);
     void startColorChanged(QColor startColor);
     void endColorChanged(QColor endColor);

 private:
     void updateTexture();
     QByteArray generateTexture();

     static QColor linearInterpolate(const QColor &color1, const QColor &color2, float value);

     int m_height = 256;
     int m_width = 256;
     QColor m_startColor = QColor(QStringLiteral("#d4fc79"));
     QColor m_endColor = QColor(QStringLiteral("#96e6a1"));
 };

 #endif // GRADIENTTEXTURE_H