QQuick3DTextureData Class
用于定义自定义纹理数据的基类。更多
Header: | #include <QQuick3DTextureData> |
Since: | Qt 6.0 |
In QML: | TextureData |
Inherits: | QQuick3DObject |
公共类型
enum | 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 XML 5 中,类型注册是通过qmlRegisterType 进行的:
qmlRegisterType<MyCustomTextureData>("Example", 1, 0, "MyCustomTextureData");
在 Qt 6 中,默认方法是在构建系统的帮助下使用自动注册。在.pro
文件中,不再调用qmlRegisterType :
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 { } } }
成员类型文档
enum 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 | 颜色格式为 BC2 压缩格式,包含 R、G、B 和 Alpha 通道。 |
QQuick3DTextureData::BC3 | 11 | 彩色格式被视为具有 R、G、B 和 Alpha 通道的 BC3 压缩格式。 |
QQuick3DTextureData::BC4 | 12 | 彩色格式被视为 BC4 压缩格式,只有一个彩色通道。 |
QQuick3DTextureData::BC5 | 13 | 彩色格式被视为具有两个彩色通道的 BC5 压缩格式。 |
QQuick3DTextureData::BC6H | 14 | 彩色格式被视为 BC6H 压缩格式,有三个高动态范围彩色通道。 |
QQuick3DTextureData::BC7 | 15 | 彩色格式为 BC7 压缩格式,有 R、G、B 和 alpha 通道。 |
QQuick3DTextureData::DXT1_RGBA | 16 | 彩色格式为 DXT1 压缩格式,具有 R、G、B 和 Alpha 通道。 |
QQuick3DTextureData::DXT1_RGB | 17 | 彩色格式被视为具有 R、G 和 B 通道的 DXT1 压缩格式。 |
QQuick3DTextureData::DXT3_RGBA | 18 | 彩色格式被视为具有 R、G、B 和 Alpha 通道的 DXT3 压缩格式。 |
QQuick3DTextureData::DXT5_RGBA | 19 | 彩色格式为 DXT5 压缩格式,有 R、G、B 和 alpha 通道。 |
QQuick3DTextureData::ETC2_RGB8 | 20 | 颜色格式被视为 RGB888 数据的 ETC2 压缩格式。 |
QQuick3DTextureData::ETC2_RGB8A1 | 21 | 对于 Alpha 为 1 位的 RGBA 数据,颜色格式被视为 ETC2 压缩格式。 |
QQuick3DTextureData::ETC2_RGBA8 | 22 | 对于 RGBA8888 数据,颜色格式被视为 ETC2 压缩格式。 |
QQuick3DTextureData::ASTC_4x4 | 23 | 彩色格式被视为 ASTC 压缩格式,占用 4x4 块空间。 |
QQuick3DTextureData::ASTC_5x4 | 24 | 彩色格式被视为 ASTC 压缩格式,占用 5x4 个数据块。 |
QQuick3DTextureData::ASTC_5x5 | 25 | 彩色格式被视为 ASTC 压缩格式,占用 5x5 个数据块。 |
QQuick3DTextureData::ASTC_6x5 | 26 | 彩色格式被视为 ASTC 压缩格式,占用 6x5 个数据块。 |
QQuick3DTextureData::ASTC_6x6 | 27 | 彩色格式被视为 ASTC 压缩格式,占板面积为 6x6 块。 |
QQuick3DTextureData::ASTC_8x5 | 28 | 彩色格式被视为 ASTC 压缩格式,占用 8x5 个数据块。 |
QQuick3DTextureData::ASTC_8x6 | 29 | 彩色格式被视为 ASTC 压缩格式,占用 8x6 块空间。 |
QQuick3DTextureData::ASTC_8x8 | 30 | 彩色格式被视为 ASTC 压缩格式,占用 8x8 个数据块。 |
QQuick3DTextureData::ASTC_10x5 | 31 | 彩色格式被视为 ASTC 压缩格式,占用 10x5 个数据块。 |
QQuick3DTextureData::ASTC_10x6 | 32 | 彩色格式被视为 ASTC 压缩格式,占用 10x6 个数据块。 |
QQuick3DTextureData::ASTC_10x8 | 33 | 彩色格式被视为 ASTC 压缩格式,占用 10x8 个数据块。 |
QQuick3DTextureData::ASTC_10x10 | 34 | 彩色格式被视为 ASTC 压缩格式,占用 10x10 个数据块。 |
QQuick3DTextureData::ASTC_12x10 | 35 | 彩色格式被视为 ASTC 压缩格式,占地面积为 12x10 块。 |
QQuick3DTextureData::ASTC_12x12 | 36 | 彩色格式被视为 ASTC 压缩格式,占位面积为 12x12 块。 |
注: 除RGBA8
外,并非所有格式在运行时都受支持,这取决于使用的后端和硬件。
注: RGBE
在内部表示为RGBA8
,但在用作 lightProbe 或天空盒纹理时会按描述进行解释。
注: 使用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)
设置纹理数据的depth (单位:像素)。将深度设置为 0 以上意味着纹理将作为三维纹理处理。
另请参阅 depth().
void QQuick3DTextureData::setFormat(QQuick3DTextureData::Format format)
设置纹理数据的format 。
默认格式为 /c RGBA8
另请参阅 format().
void QQuick3DTextureData::setHasTransparency(bool hasTransparency)
如果纹理数据具有非不透明值的活动 alpha 通道,则将hasTransparency 设置为 true。
这是引擎的一种优化方法,因此对于支持 alpha 通道的格式,无需检查每个值是否为非不透明值。
另请参见 hasTransparency()。
void QQuick3DTextureData::setSize(const QSize &size)
设置纹理数据的size (像素)。
另请参阅 size()。
void QQuick3DTextureData::setTextureData(const QByteArray &data)
设置纹理数据。data 的内容必须尊重size 和format 属性,因为后端会尝试上传并使用这些数据,就像使用大小和格式相同的纹理一样,如果有任何偏差,结果将是纹理渲染不正确或可能崩溃。
另请参见 textureData()。
QSize QQuick3DTextureData::size() const
以像素为单位返回纹理数据的大小。
另请参阅 setSize()。
const QByteArray QQuick3DTextureData::textureData() const
返回此项目定义的当前纹理数据。
另请参阅 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.