QQuick3DTextureData 类
用于定义自定义纹理数据的基类。 更多信息...
头文件 | #include <QQuick3DTextureData> |
从 | Qt 6.0 |
实例化 | TextureData |
继承自 | QQuick3DObject |
公共类型
枚举 | Format { None, RGBA8, RGBA16F, RGBA32F, RGBE8, …, ASTC_12x12 } |
公共函数
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 |
详细说明
QQuick3DTextureData 类可用于在 Qt Quick 3D 场景中指定 Texture 的自定义纹理数据。
尽管不是强制性的,但典型的用法是从该类继承。然后通过将其注册到类型系统中将子类暴露给 QML。然后,可以将 Texture 的 textureData 属性设置为引用已注册的类型的一个实例。
示例实现
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::None | 0 | 颜色格式未定义 |
QQuick3DTextureData::RGBA8 | 1 | 颜色格式被考虑为 R、G、B 和 alpha 通道中的 8 位整数值。 |
QQuick3DTextureData::RGBA16F | 2 | 颜色格式被考虑为 R、G、B 和 alpha 通道中的 16 位浮点值。 |
QQuick3DTextureData::RGBA32F | 3 | 颜色格式被考虑为 R、G、B 和 alpha 通道中的 32 位浮点值。 |
QQuick3DTextureData::RGBE8 | 4 | 颜色格式被考虑为 R、G、B 通道中的 8 位尾数和 8 位共享指数。 |
QQuick3DTextureData::R8 | 5 | 颜色格式被考虑为 R 通道中的 8 位整数值。 |
QQuick3DTextureData::R16 | 6 | 颜色格式被考虑为 R 通道中的 16 位整数值。 |
QQuick3DTextureData::R16F | 7 | 颜色格式被考虑为 R 通道中的 16 位浮点值。 |
QQuick3DTextureData::R32F | 8 | 颜色格式被考虑为 R 通道中的 32 位浮点值。 |
QQuick3DTextureData::BC1 | 9 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 BC1 压缩格式。 |
QQuick3DTextureData::BC2 | 10 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 BC2 压缩格式。 |
QQuick3DTextureData::BC3 | 11 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 BC3 压缩格式。 |
QQuick3DTextureData::BC4 | 12 | 颜色格式被视为单个颜色通道的 BC4 压缩格式。 |
QQuick3DTextureData::BC5 | 13 | 颜色格式被视为两个颜色通道的 BC5 压缩格式。 |
QQuick3DTextureData::BC6H | 14 | 颜色格式被视为具有三个高动态范围颜色通道的 BC6H 压缩格式。 |
QQuick3DTextureData::BC7 | 15 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 BC7 压缩格式。 |
QQuick3DTextureData::DXT1_RGBA | 16 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 DXT1 压缩格式。 |
QQuick3DTextureData::DXT1_RGB | 17 | 颜色格式被视为具有 R、G 和 B 通道的 DXT1 压缩格式。 |
QQuick3DTextureData::DXT3_RGBA | 18 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 DXT3 压缩格式。 |
QQuick3DTextureData::DXT5_RGBA | 19 | 颜色格式被视为具有 R、G、B 和 alpha 通道的 DXT5 压缩格式。 |
QQuick3DTextureData::ETC2_RGB8 | 20 | 颜色格式被视为 RGB888 数据的 ETC2 压缩格式。 |
QQuick3DTextureData::ETC2_RGB8A1 | 21 | 颜色格式被视为 alpha 为 1 位的 RGBA 数据的 ETC2 压缩格式。 |
QQuick3DTextureData::ETC2_RGBA8 | 22 | 颜色格式被视为 RGBA8888 数据的 ETC2 压缩格式。 |
QQuick3DTextureData::ASTC_4x4 | 23 | 颜色格式被视为具有 4x4 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_5x4 | 24 | 颜色格式被视为具有 5x4 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_5x5 | 25 | 颜色格式被视为具有 5x5 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_6x5 | 26 | 颜色格式被视为具有 6x5 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_6x6 | 27 | 颜色格式被视为具有 6x6 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_8x5 | 28 | 颜色格式被视为具有 8x5 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_8x6 | 29 | 颜色格式被视为具有 8x6 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_8x8 | 30 | 颜色格式被视为具有 8x8 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_10x5 | 31 | 颜色格式被视为具有 10x5 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_10x6 | 32 | 颜色格式被视为具有 10x6 块脚印的 ASTC 压缩格式。 |
QQuick3DTextureData::ASTC_10x8 | 33 | 颜色格式被视为具有10x8块足迹的ASTC压缩格式。 |
QQuick3DTextureData::ASTC_10x10 | 34 | 颜色格式被视为具有10x10块足迹的ASTC压缩格式。 |
QQuick3DTextureData::ASTC_12x10 | 35 | 颜色格式被视为具有12x10块足迹的ASTC压缩格式。 |
QQuick3DTextureData::ASTC_12x12 | 36 | 颜色格式被视为具有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的内容,使其与size和format属性相匹配,因为后端将尝试上传并使用数据,仿佛它是一个大小和格式的纹理,并且如果有任何偏差,结果将在错误渲染纹理或可能崩溃之间。
另请参阅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. 在芬兰以及其他国家和地区的商标。所有其他商标都是其各自所有者的财产。