PySide6.QtQuick3D.QQuick3DTextureData

class QQuick3DTextureData

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

PySide6.QtQuick3D.QQuick3DTextureData 的继承图

概要

方法

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

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 中,默认方法是借助构建系统使用自动注册。现在,.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 { }
    }
}
class Format

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

常量

描述

QQuick3DTextureData.None

颜色格式未定义

QQuick3DTextureData.RGBA8

颜色格式被视为R、G、B和alpha通道中的8位整数。

QQuick3DTextureData.RGBA16F

颜色格式被视为R、G、B和alpha通道中的16位浮点数。

QQuick3DTextureData.RGBA32F

颜色格式被视为R、G、B和alpha通道中的32位浮点数。

QQuick3DTextureData.RGBE8

颜色格式被视为R、G和B通道中的8位尾数和8位共享指数。

QQuick3DTextureData.R8

颜色格式被视为R通道中的8位整数。

QQuick3DTextureData.R16

颜色格式被视为R通道中的16位整数。

QQuick3DTextureData.R16F

颜色格式被视为R通道中的16位浮点数。

QQuick3DTextureData.R32F

颜色格式被视为32位浮点R通道。

QQuick3DTextureData.BC1

颜色格式被视为带有R、G、B和alpha通道的BC1压缩格式。

QQuick3DTextureData.BC2

颜色格式被视为带有R、G、B和alpha通道的BC2压缩格式。

QQuick3DTextureData.BC3

颜色格式被视为带有R、G、B和alpha通道的BC3压缩格式。

QQuick3DTextureData.BC4

颜色格式被视为具有一个颜色通道的BC4压缩格式。

QQuick3DTextureData.BC5

颜色格式被视为具有两个颜色通道的BC5压缩格式。

QQuick3DTextureData.BC6H

颜色格式被视为具有三个高动态范围颜色通道的BC6H压缩格式。

QQuick3DTextureData.BC7

颜色格式被视为带有R、G、B和alpha通道的BC7压缩格式。

QQuick3DTextureData.DXT1_RGBA

颜色格式被视为具有R、G、B和alpha通道的DXT1压缩格式。

QQuick3DTextureData.DXT1_RGB

颜色格式被视为具有R、G和B通道的DXT1压缩格式。

QQuick3DTextureData.DXT3_RGBA

颜色格式被视为具有R、G、B和alpha通道的DXT3压缩格式。

QQuick3DTextureData.DXT5_RGBA

颜色格式被视为具有R、G、B和alpha通道的DXT5压缩格式。

QQuick3DTextureData.ETC2_RGB8

颜色格式被视为用于RGB888数据的ETC2压缩格式

QQuick3DTextureData.ETC2_RGB8A1

颜色格式被视为用于RGBA数据的ETC2压缩格式,其中alpha为1位。

QQuick3DTextureData.ETC2_RGBA8

颜色格式被视为带有RGBA8888数据的ETC2压缩格式。

QQuick3DTextureData.ASTC_4x4

颜色格式被视为具有4x4块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_5x4

颜色格式被视为具有5x4块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_5x5

颜色格式被视为具有5x5块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_6x5

颜色格式被视为具有6x5块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_6x6

颜色格式被视为具有6x6块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_8x5

颜色格式被视为具有8x5块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_8x6

颜色格式被视为具有8x6块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_8x8

颜色格式被视为具有8x8块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_10x5

颜色格式被视为具有10x5块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_10x6

颜色格式被视为具有10x6块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_10x8

颜色格式被视为具有10x8块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_10x10

颜色格式被视为具有10x10块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_12x10

颜色格式被视为具有12x10块足迹的ASTC压缩格式。

QQuick3DTextureData.ASTC_12x12

颜色格式被视为具有12x12块足迹的ASTC压缩格式。

注意

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

注意

RGBE 在内部表示为 RGBA8,但在用作 lightProbe 或 skybox 纹理时,会按照描述进行解释。

注意

使用值 None 将假定默认值为 RGBA8

__init__([parent=None])
Parameters:

父级QQuick3DObject

depth()
Return type:

整数

返回纹理数据的深度(以像素为单位)。

另请参阅

setDepth()

format()
Return type:

格式

返回纹理数据的格式。

另请参阅

setFormat()

hasTransparency()
Return type:

布尔

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

默认值为false

另请参阅

setHasTransparency()

setDepth(depth)
Parameters:

深度 – int

设置纹理数据的depth(深度),单位为像素。将深度设置为大于0的值意味着纹理将被处理为3D纹理。

另请参阅

depth()

setFormat(format)
Parameters:

formatFormat

设置纹理数据的format

默认格式是 /c RGBA8

另请参阅

format()

setHasTransparency(hasTransparency)
Parameters:

hasTransparency – 布尔值

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

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

另请参阅

hasTransparency()

setSize(size)
Parameters:

大小QSize

设置纹理数据的size(以像素为单位)。

另请参阅

size()

setTextureData(data)
Parameters:

数据QByteArray

设置纹理数据。data的内容必须符合sizeformat属性,因为后端会尝试上传并使用这些数据,就像它是一个具有特定大小和格式的纹理一样。如果有任何偏差,结果可能会在纹理渲染不正确或可能导致崩溃之间。

另请参阅

textureData()

size()
Return type:

QSize

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

另请参阅

setSize()

textureData()
Return type:

QByteArray

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

另请参阅

setTextureData()

textureDataNodeDirty()