QQuick3DTextureData 类

用于定义自定义纹理数据的基类。 更多信息...

头文件 #include <QQuick3DTextureData>
Qt 6.0
实例化 TextureData
继承自 QQuick3DObject

公共类型

枚举Format { None, RGBA8, RGBA16F, RGBA32F, RGBE8, …, ASTC_12x12 }

公共函数

intdepth() const
QQuick3DTextureData::Formatformat() const
boolhasTransparency() const
voidsetDepth(int depth)
voidsetFormat(QQuick3DTextureData::Format format)
voidsetHasTransparency(bool hasTransparency)
voidsetSize(const QSize &size)
voidsetTextureData(const QByteArray &data)
QSizesize() const
const QByteArraytextureData() const

详细说明

QQuick3DTextureData 类可用于在 Qt Quick 3D 场景中指定 Texture 的自定义纹理数据。

尽管不是强制性的,但典型的用法是从该类继承。然后通过将其注册到类型系统中将子类暴露给 QML。然后,可以将 TexturetextureData 属性设置为引用已注册的类型的一个实例。

示例实现

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);
    }
};

此类可以被注册为 QML 类型,并用作 Texture

在 Qt 5 中,使用 qmlRegisterType 执行类型注册

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

在 Qt 6 中,默认方法是通过构建系统的帮助进行自动注册。不再需要调用 qmlRegisterType,现在 .pro 文件可以包含

CONFIG += qmltypes
QML_IMPORT_NAME = Example
QML_IMPORT_MAJOR_VERSION = 1

使用 CMake 时,自动注册是默认行为,因此除了基本的 QML 模块设置之外不需要特殊设置

qt_add_qml_module(application
    URI Example
    VERSION 1.0
)

类实现应添加 QML_NAMED_ELEMENT

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

然后 QML 代码可以使用自定义类型

import Example 1.0

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

成员类型文档

枚举 QQuick3DTextureData::Format

返回在 textureData 属性中分配的纹理数据颜色格式。

常量描述
QQuick3DTextureData::None0颜色格式未定义
QQuick3DTextureData::RGBA81颜色格式被考虑为 R、G、B 和 alpha 通道中的 8 位整数值。
QQuick3DTextureData::RGBA16F2颜色格式被考虑为 R、G、B 和 alpha 通道中的 16 位浮点值。
QQuick3DTextureData::RGBA32F3颜色格式被考虑为 R、G、B 和 alpha 通道中的 32 位浮点值。
QQuick3DTextureData::RGBE84颜色格式被考虑为 R、G、B 通道中的 8 位尾数和 8 位共享指数。
QQuick3DTextureData::R85颜色格式被考虑为 R 通道中的 8 位整数值。
QQuick3DTextureData::R166颜色格式被考虑为 R 通道中的 16 位整数值。
QQuick3DTextureData::R16F7颜色格式被考虑为 R 通道中的 16 位浮点值。
QQuick3DTextureData::R32F8颜色格式被考虑为 R 通道中的 32 位浮点值。
QQuick3DTextureData::BC19颜色格式被视为具有 R、G、B 和 alpha 通道的 BC1 压缩格式。
QQuick3DTextureData::BC210颜色格式被视为具有 R、G、B 和 alpha 通道的 BC2 压缩格式。
QQuick3DTextureData::BC311颜色格式被视为具有 R、G、B 和 alpha 通道的 BC3 压缩格式。
QQuick3DTextureData::BC412颜色格式被视为单个颜色通道的 BC4 压缩格式。
QQuick3DTextureData::BC513颜色格式被视为两个颜色通道的 BC5 压缩格式。
QQuick3DTextureData::BC6H14颜色格式被视为具有三个高动态范围颜色通道的 BC6H 压缩格式。
QQuick3DTextureData::BC715颜色格式被视为具有 R、G、B 和 alpha 通道的 BC7 压缩格式。
QQuick3DTextureData::DXT1_RGBA16颜色格式被视为具有 R、G、B 和 alpha 通道的 DXT1 压缩格式。
QQuick3DTextureData::DXT1_RGB17颜色格式被视为具有 R、G 和 B 通道的 DXT1 压缩格式。
QQuick3DTextureData::DXT3_RGBA18颜色格式被视为具有 R、G、B 和 alpha 通道的 DXT3 压缩格式。
QQuick3DTextureData::DXT5_RGBA19颜色格式被视为具有 R、G、B 和 alpha 通道的 DXT5 压缩格式。
QQuick3DTextureData::ETC2_RGB820颜色格式被视为 RGB888 数据的 ETC2 压缩格式。
QQuick3DTextureData::ETC2_RGB8A121颜色格式被视为 alpha 为 1 位的 RGBA 数据的 ETC2 压缩格式。
QQuick3DTextureData::ETC2_RGBA822颜色格式被视为 RGBA8888 数据的 ETC2 压缩格式。
QQuick3DTextureData::ASTC_4x423颜色格式被视为具有 4x4 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_5x424颜色格式被视为具有 5x4 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_5x525颜色格式被视为具有 5x5 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_6x526颜色格式被视为具有 6x5 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_6x627颜色格式被视为具有 6x6 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_8x528颜色格式被视为具有 8x5 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_8x629颜色格式被视为具有 8x6 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_8x830颜色格式被视为具有 8x8 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_10x531颜色格式被视为具有 10x5 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_10x632颜色格式被视为具有 10x6 块脚印的 ASTC 压缩格式。
QQuick3DTextureData::ASTC_10x833颜色格式被视为具有10x8块足迹的ASTC压缩格式。
QQuick3DTextureData::ASTC_10x1034颜色格式被视为具有10x10块足迹的ASTC压缩格式。
QQuick3DTextureData::ASTC_12x1035颜色格式被视为具有12x10块足迹的ASTC压缩格式。
QQuick3DTextureData::ASTC_12x1236颜色格式被视为具有12x12块足迹的ASTC压缩格式。

注意: 除了RGBA8之外,并非所有格式在运行时都受支持,因为这还取决于所使用的后端以及所使用的硬件。

注意: RGBE在内部表示为RGBA8,但在用作lightProbe或skybox纹理时按所述进行解释。

注意: 使用值None将假定默认值RGBA8

成员函数文档

int QQuick3DTextureData::depth() const

返回纹理数据的深度(像素)。

另请参阅 setDepth().

QQuick3DTextureData::Format QQuick3DTextureData::format() const

返回纹理数据的格式。

另请参阅 setFormat().

bool QQuick3DTextureData::hasTransparency() const

如果纹理数据具有透明度,则返回true

默认值是false

另请参阅 setHasTransparency().

void QQuick3DTextureData::setDepth(int depth)

设置纹理数据在像素值中的深度。将深度设置为大于0将意味着该纹理被处理为3D纹理。

另请参阅 depth().

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

设置纹理数据的格式

默认格式是 RGBA8

另请参阅 format().

void QQuick3DTextureData::setHasTransparency(bool hasTransparency)

如果纹理数据具有带非不透明值的活动的alpha通道,则将hasTransparency设置为true。

这被引擎用作优化,因为对于支持alpha通道的格式,不需要检查每个值是否为不透明值。

另请参阅 hasTransparency().

void QQuick3DTextureData::setSize(const QSize &size)

设置纹理数据在像素值中的大小

另请参阅 size().

void QQuick3DTextureData::setTextureData(const QByteArray &data)

设置纹理数据。必须遵守数据data的内容,使其与sizeformat属性相匹配,因为后端将尝试上传并使用数据,仿佛它是一个大小和格式的纹理,并且如果有任何偏差,结果将在错误渲染纹理或可能崩溃之间。

另请参阅textureData

QSize QQuick3DTextureData::size() const

返回纹理数据的大小(像素)。

另请参阅setSize

const QByteArray QQuick3DTextureData::textureData() const

返回由当前项定义的当前纹理数据。

另请参阅setTextureData

© 2024 The Qt Company Ltd. 本文档的贡献是各位所有者的版权。本文档的提供受GNU自由文档许可版本1.3的条款约束,由自由软件基金会发布。Qt及其相应的标志是The Qt Company Ltd. 在芬兰以及其他国家和地区的商标。所有其他商标都是其各自所有者的财产。