QQuick3DTextureData Class

Basisklasse zur Definition eigener Texturdaten. Mehr...

Header: #include <QQuick3DTextureData>
Since: Qt 6.0
In QML: TextureData
Inherits: QQuick3DObject

Öffentliche Typen

enum Format { None, RGBA8, RGBA16F, RGBA32F, RGBE8, …, ASTC_12x12 }

Öffentliche Funktionen

int depth() const
QQuick3DTextureData::Format format() const
bool hasTransparency() const
void setDepth(int depth)
void setFormat(QQuick3DTextureData::Format format)
void setHasTransparency(bool hasTransparency)
void setSize(const QSize &size)
void setTextureData(const QByteArray &data)
QSize size() const
const QByteArray textureData() const

Detaillierte Beschreibung

Die Klasse QQuick3DTextureData kann verwendet werden, um benutzerdefinierte Texturdaten für eine Texture in einer Qt Quick 3D -Szene anzugeben.

Obwohl dies nicht unbedingt erforderlich ist, ist die typische Verwendung, von dieser Klasse zu erben. Die Unterklasse wird dann in QML sichtbar gemacht, indem sie im Typsystem registriert wird. Die Eigenschaft textureData einer Texture kann dann so eingestellt werden, dass sie auf eine Instanz des registrierten Typs verweist.

Beispiel-Implementierung:

class CustomTextureData : public QQuick3DTextureData
{
    Q_OBJECT
    ... properties ...

public:
    CustomTextureData() { regenerateTextureData(); }

    void setProperty(...)
    {
        // Change relevant internal data.
        // ...

        // Update the texture data
        regenerateTextureData();

        // Finally, trigger an update. This is relevant in case nothing else
        // is changed in the scene; this way we make sure a new frame will
        // be rendered
        update();
    }
private:
    void regenerateTextureData()
    {
        QByteArray textureData;
        textureData = generateTextureData();
        setTextureData(textureData);
        setSize(QSize(256, 256));
        setFormat(QQuick3DTextureData::Format::RGBA8)
        setHasTransparency(true);
    }
};

Diese Klasse kann dann als QML-Typ registriert und mit Texture verwendet werden.

In Qt 5 erfolgte die Typregistrierung mit qmlRegisterType:

qmlRegisterType<MyCustomTextureData>("Example", 1, 0, "MyCustomTextureData");

In Qt 6 ist der Standardansatz die automatische Registrierung mit Hilfe des Build-Systems. Anstatt qmlRegisterType aufzurufen, kann die Datei .pro nun enthalten:

CONFIG += qmltypes
QML_IMPORT_NAME = Example
QML_IMPORT_MAJOR_VERSION = 1

Mit CMake ist die automatische Registrierung das Standardverhalten, so dass keine besonderen Einstellungen über das grundlegende QML-Modul-Setup hinaus erforderlich sind:

qt_add_qml_module(application
    URI Example
    VERSION 1.0
)

Die Klassenimplementierung sollte QML_NAMED_ELEMENT hinzufügen:

class CustomTextureData : public QQuick3DTextureData
{
    Q_OBJECT
    QML_NAMED_ELEMENT(MyCustomTextureData)
    ...
};

Der QML-Code kann dann den benutzerdefinierten Typ verwenden:

import Example 1.0

Model {
    source: "#Cube"
    materials: [
        DefaultMaterial {
            diffuseMap: diffuseMapCustomTexture
        }
    ]
    Texture {
        id: diffuseMapCustomTexture
        textureData: MyCustomTextureData { }
    }
}

Member Type Dokumentation

enum QQuick3DTextureData::Format

Gibt das Farbformat der in der Eigenschaft textureData zugewiesenen Texturdaten zurück.

KonstanteWertBeschreibung
QQuick3DTextureData::None0Das Farbformat ist nicht definiert
QQuick3DTextureData::RGBA81Das Farbformat wird als 8-Bit-Integer in den R-, G-, B- und Alpha-Kanälen betrachtet.
QQuick3DTextureData::RGBA16F2Das Farbformat wird als 16-Bit-Float in den R-, G-, B- und Alphakanälen betrachtet.
QQuick3DTextureData::RGBA32F3Das Farbformat wird als 32-Bit-Float in den R-, G-, B- und Alphakanälen betrachtet.
QQuick3DTextureData::RGBE84Das Farbformat wird als 8-Bit-Mantisse in den R-, G- und B-Kanälen und als gemeinsamer 8-Bit-Exponent betrachtet.
QQuick3DTextureData::R85Das Farbformat wird als 8-Bit-Ganzzahl im R-Kanal betrachtet.
QQuick3DTextureData::R166Das Farbformat wird als 16-Bit-Ganzzahl im R-Kanal betrachtet.
QQuick3DTextureData::R16F7Das Farbformat wird als 16-Bit-Float im R-Kanal betrachtet.
QQuick3DTextureData::R32F8Das Farbformat wird als 32-Bit-Float im R-Kanal betrachtet.
QQuick3DTextureData::BC19Das Farbformat wird als komprimiertes BC1-Format mit R-, G-, B- und Alpha-Kanälen betrachtet.
QQuick3DTextureData::BC210Das Farbformat gilt als komprimiertes BC2-Format mit R-, G-, B- und Alphakanälen.
QQuick3DTextureData::BC311Das Farbformat gilt als komprimiertes BC3-Format mit R-, G-, B- und Alphakanälen.
QQuick3DTextureData::BC412Das Farbformat wird als BC4-komprimiertes Format mit einem Farbkanal betrachtet.
QQuick3DTextureData::BC513Das Farbformat gilt als BC5 komprimiertes Format mit zwei Farbkanälen.
QQuick3DTextureData::BC6H14Das Farbformat gilt als BC6H-komprimiertes Format mit drei Farbkanälen mit hohem Dynamikbereich.
QQuick3DTextureData::BC715Das Farbformat gilt als BC7-komprimiertes Format mit R-, G-, B- und Alpha-Kanälen.
QQuick3DTextureData::DXT1_RGBA16Das Farbformat gilt als DXT1-komprimiertes Format mit R-, G-, B- und Alphakanälen.
QQuick3DTextureData::DXT1_RGB17Das Farbformat gilt als DXT1-komprimiertes Format mit R-, G- und B-Kanälen.
QQuick3DTextureData::DXT3_RGBA18Das Farbformat gilt als DXT3-komprimiertes Format mit R-, G-, B- und Alphakanälen.
QQuick3DTextureData::DXT5_RGBA19Das Farbformat gilt als DXT5-komprimiertes Format mit R-, G-, B- und Alphakanälen.
QQuick3DTextureData::ETC2_RGB820Das Farbformat gilt als komprimiertes ETC2-Format für RGB888-Daten.
QQuick3DTextureData::ETC2_RGB8A121Das Farbformat wird als ETC2 komprimiertes Format für RGBA-Daten betrachtet, bei denen Alpha 1 Bit ist.
QQuick3DTextureData::ETC2_RGBA822Das Farbformat gilt als ETC2 komprimiertes Format für RGBA8888 Daten.
QQuick3DTextureData::ASTC_4x423Das Farbformat gilt als ASTC-komprimiertes Format mit 4x4-Block-Footprint.
QQuick3DTextureData::ASTC_5x424Das Farbformat wird als ASTC-komprimiertes Format mit 5x4-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_5x525Das Farbformat wird als ASTC-komprimiertes Format mit 5x5-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_6x526Das Farbformat wird als ASTC-komprimiertes Format mit 6x5-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_6x627Das Farbformat wird als ASTC-komprimiertes Format mit 6x6-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_8x528Das Farbformat wird als ASTC-komprimiertes Format mit 8x5-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_8x629Das Farbformat wird als ASTC-komprimiertes Format mit 8x6-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_8x830Das Farbformat wird als ASTC-komprimiertes Format mit 8x8-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_10x531Das Farbformat wird als ASTC-komprimiertes Format mit 10x5-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_10x632Das Farbformat wird als ASTC-komprimiertes Format mit 10x6-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_10x833Das Farbformat wird als ASTC-komprimiertes Format mit 10x8-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_10x1034Das Farbformat wird als ASTC-komprimiertes Format mit 10x10-Block-Footprint betrachtet.
QQuick3DTextureData::ASTC_12x1035Das Farbformat gilt als ASTC-komprimiertes Format mit 12x10 Block Footprint.
QQuick3DTextureData::ASTC_12x1236Das Farbformat wird als ASTC-komprimiertes Format mit 12x12-Block-Footprint betrachtet.

Hinweis: Mit Ausnahme von RGBA8 wird nicht jedes Format zur Laufzeit unterstützt, da dies davon abhängt, welches Backend verwendet wird und welche Hardware zum Einsatz kommt.

Hinweis: RGBE wird intern als RGBA8 dargestellt, wird aber wie beschrieben interpretiert, wenn es als lightProbe oder Skybox-Textur verwendet wird.

Hinweis: Bei Verwendung des Wertes None wird der Standardwert von RGBA8

Dokumentation der Mitgliedsfunktionen

int QQuick3DTextureData::depth() const

Gibt die Tiefe der Texturdaten in Pixeln zurück.

Siehe auch setDepth().

QQuick3DTextureData::Format QQuick3DTextureData::format() const

Gibt das Format der Texturdaten zurück.

Siehe auch setFormat().

bool QQuick3DTextureData::hasTransparency() const

Gibt true zurück, wenn die Texturdaten transparent sind.

Der Standardwert ist false.

Siehe auch setHasTransparency().

void QQuick3DTextureData::setDepth(int depth)

Legt die depth der Texturdaten in Pixeln fest. Wird die Tiefe über 0 gesetzt, wird die Textur als 3D-Textur behandelt.

Siehe auch depth().

void QQuick3DTextureData::setFormat(QQuick3DTextureData::Format format)

Legt die format der Texturdaten fest.

Das Standardformat ist /c RGBA8

Siehe auch format().

void QQuick3DTextureData::setHasTransparency(bool hasTransparency)

Setzen Sie hasTransparency auf true, wenn die Texturdaten einen aktiven Alphakanal mit nicht-opaken Werten haben.

Dies wird von der Engine als Optimierung verwendet, damit bei Formaten, die einen Alphakanal unterstützen, nicht jeder Wert auf nicht-opake Werte geprüft werden muss.

Siehe auch hasTransparency().

void QQuick3DTextureData::setSize(const QSize &size)

Legt die size der Texturdaten in Pixeln fest.

Siehe auch size().

void QQuick3DTextureData::setTextureData(const QByteArray &data)

Legt die Texturdaten fest. Der Inhalt von data muss die Eigenschaften size und format respektieren, da das Backend versuchen wird, die Daten hochzuladen und zu verwenden, als ob es sich um eine Textur der Größe und des Formats handeln würde, und wenn es irgendeine Abweichung gibt, wird das Ergebnis irgendwo zwischen fehlerhafter Darstellung der Textur oder möglicherweise einem Absturz liegen.

Siehe auch textureData().

QSize QQuick3DTextureData::size() const

Gibt die Größe der Texturdaten in Pixeln zurück.

Siehe auch setSize().

const QByteArray QQuick3DTextureData::textureData() const

Gibt die aktuellen Texturdaten zurück, die durch dieses Element definiert sind.

Siehe auch setTextureData().

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.