Auf dieser Seite

QuadTextureProvider QML Type

Wird verwendet, um eine Quad-Textur mithilfe eines benutzerdefinierten Fragment-Shaders zu rendern. Mehr...

Import Statement: import QtQuick3D.Helpers
Since: Qt 6.12
Inherits:

TextureProviderExtension

Eigenschaften

Ausführliche Beschreibung

Dieser Typ wird verwendet, um Quad-Texturen mithilfe von benutzerdefiniertem Shader-Code zu rendern, was eine bequeme Möglichkeit bietet, programmierbare Texturen zu erhalten. Durch die Angabe eines Fragment-Shaders und der gewünschten Eigenschaften wird ein Pass erstellt und auf Basis der bereitgestellten Daten eine Shader-Pipeline aufgebaut, wobei die Eigenschaften als Uniform-Werte an den Fragment-Shader übergeben werden.

Voreingestellte Schlüsselwörter:

SchlüsselwortTypBeschreibung
MAINvoid MAIN() ist der Einstiegspunkt. Diese Funktion muss in dem bereitgestellten Fragment-Shader immer vorhanden sein.
INPUT_UVvec2UV-Koordinaten für das aktuelle Fragment. Oben rechts: [1, 1] und unten links: [0, 0].
OUTPUT_SIZEvec2Größe der Ausgabetextur.

Benutzerdefinierte Eigenschaften werden auf Uniforms abgebildet. Sobald sich die Werte ändern, wird der aktualisierte Wert im Shader sichtbar. Dieses Konzept ist möglicherweise bereits aus ShaderEffect bekannt.

Der Name der QML-Eigenschaft und der GLSL-Variablen muss übereinstimmen. Es gibt keine separate Deklaration im Shader-Code für die einzelnen Uniforms. Stattdessen kann der Name der QML-Eigenschaft unverändert verwendet werden.

Die folgende Tabelle listet auf, wie die Typen zugeordnet werden:

QML-TypShader-TypAnmerkungen
real, int, boolfloat, int, bool
Farbevec4Die Konvertierung von sRGB in lineare Werte erfolgt implizit
vector2dvec2
Vektor3dvec3
vector4dvec4
Matrix4x4mat4
Quaternionvec4Der Skalarwert ist w
Rechteckvec4
Punkt, Größevec2
TextureInputsampler2D

Ein Beispiel für die Ausgabe einer einfachen roten Textur könnte wie folgt aussehen:

Texture {
    textureProvider: QuadTextureProvider {
        width: 128
        height: 128
        fragmentShaderCode: `
            void MAIN() {
                FRAGCOLOR = vec4(1.0, 0.0, 0.0, 1.0);
            }
        `
    }
}

Ein weiteres Beispiel für das Abtasten einer „ Texture “-Eigenschaft und das Mischen mit UV-Farben:

Texture {
    textureProvider: QuadTextureProvider {
        fragmentShaderCode: `
        void MAIN() {
            vec2 uv = INPUT_UV;
            vec4 c = texture(checkers, uv);
            FRAGCOLOR = mix(c, vec4(uv, 1, 1), 0.5);
        }`

        property Texture checkers : Texture {
            source: "../shared/maps/checkers2.png"
        }
    }
}

Das Ergebnis sieht wie folgt aus:

2×2-Raster aus Zellen mit Farbverlauf in Blaugrün, Weiß, Blau und Magenta

Hinweis: Die Bereitstellung eines Vertex-Shaders wird nicht unterstützt, nur ein Fragment-Shader.

Hinweis: Wenn „ Texture “-Eigenschaften angegeben werden, erfolgt die Darstellung erst, wenn die abhängigen Texturen verfügbar sind.

Hinweis: Derzeitwird das Hinzufügen oder Entfernen von Eigenschaften zur Laufzeit nicht unterstützt;es können lediglich die ursprünglichen Eigenschaften geändert werden.

Siehe auch „ ShaderEffect “.

Dokumentation zu Eigenschaften

format : enumeration [default: TexureData.RGBA16F, since 6.12]

Diese Eigenschaft legt das Format der Ausgabetextur fest.

KonstanteBeschreibung
TexureData.RGBA8Das Farbformat wird als 8-Bit-Ganzzahl in den Kanälen R, G, B und Alpha betrachtet.
TexureData.RGBA16FDas Farbformat wird als 16-Bit-Float in den R-, G-, B- und Alpha-Kanälen betrachtet.
TexureData.RGBA32FDas Farbformat wird als 32-Bit-Float in den R-, G-, B- und Alpha-Kanälen betrachtet.
TexureData.RGBE8Das Farbformat wird als 8-Bit-Mantisse in den R-, G- und B-Kanälen und als gemeinsamer 8-Bit-Exponent betrachtet.
TexureData.R8Das Farbformat wird als 8-Bit-Ganzzahl im R-Kanal behandelt.
TexureData.R16Das Farbformat wird im R-Kanal als 16-Bit-Ganzzahl betrachtet.
TexureData.R16FDas Farbformat wird als 16-Bit-Float im R-Kanal betrachtet.
TexureData.R32FDas Farbformat wird als 32-Bit-Float im R-Kanal behandelt.

Hinweis: Mit Ausnahme von „ TexureData.RGBA8 “ wird nicht jedes Format zur Laufzeit unterstützt, da dies davon abhängt, welches Backend sowie welche Hardware verwendet wird.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

fragmentShader : url [since 6.12]

Gibt die Datei mit dem Ausschnitt des benutzerdefinierten Fragment-Shader-Codes an.

Der Wert ist eine URL und muss entweder eine lokale Datei sein oder das qrc-Schema verwenden, um auf Dateien zuzugreifen, die über das Qt-Ressourcensystem eingebettet sind. Relative Dateipfade (ohne Schema) werden ebenfalls akzeptiert; in diesem Fall wird die Datei als relativ zur Komponente (der Datei „ .qml “) behandelt.

Warnung: Shader-Ausschnitte gelten als vertrauenswürdiger Inhalt. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie das Laden von benutzerdefinierten Inhalten zulassen, die nicht Teil der Anwendung sind.

Hinweis: Wenn diese Eigenschaft gesetzt ist, hat „ fragmentShaderCode “ Vorrang vor „fragmentShader“.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ fragmentShaderCode “.

fragmentShaderCode : string [since 6.12]

Gibt einen Ausschnitt aus benutzerdefiniertem Fragment-Shader-Code an.

Wird verwendet, um Shader-Code als Zeichenfolge einzubinden, anstatt eine Datei anzugeben.

Hinweis: Wenn diese Eigenschaft gesetzt ist, hat sie Vorrang vor „ fragmentShader “.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ fragmentShader “.

height : int [default: 128, since 6.12]

Legt die Höhe der Ausgabetextur in Pixeln fest.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch width.

width : int [default: 128, since 6.12]

Legt die Breite der Ausgabetextur in Pixeln fest.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch height.

© 2026 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.