QQuick3DInstancing类

用于定义实例表的基类。 更多信息...

头文件 #include <QQuick3DInstancing>
Qt 6.2
由实例化 实例化
继承 QQuick3DObject

属性

公共函数

booldepthSortingEnabled() const
boolhasTransparency() const
intinstanceCountOverride() const

公共槽函数

voidsetDepthSortingEnabled(bool enabled)
voidsetHasTransparency(bool hasTransparency)
voidsetInstanceCountOverride(int instanceCountOverride)

信号

保护函数

virtual QByteArraygetInstanceBuffer(int *instanceCount) = 0
voidmarkDirty()

静态保护成员

QQuick3DInstancing::InstanceTableEntrycalculateTableEntry(const QVector3D &position, const QVector3D &scale, const QVector3D &eulerRotation, const QColor &color, const QVector4D &customData = {})
QQuick3DInstancing::InstanceTableEntrycalculateTableEntryFromQuaternion(const QVector3D &position, const QVector3D &scale, const QQuaternion &rotation, const QColor &color, const QVector4D &customData = {})

详细说明

QQuick3DInstancing类可以继承用于指定Qt Quick 3D场景中模型的自定义实例表。

该类是抽象的:要使用它,创建一个子类并实现getInstanceBuffer方法。

属性说明

depthSortingEnabled : bool

保存实例表启用深度排序的值。当启用时,实例将从距离相机最远的实例开始排序和渲染到最近的实例,即由后至前。如果禁用(默认情况),则实例将按照在实例表中指定的顺序渲染。

注意: 实例只对彼此进行排序。实例不会与场景中的其他对象进行排序。

注意: 排序会增加帧准备时间,特别是在实例数量很多的情况下。

访问函数

booldepthSortingEnabled() const
voidsetDepthSortingEnabled(bool enabled)

通知信号

voiddepthSortingEnabledChanged()

hasTransparency : bool

将此属性设置为true,如果实例表包含在渲染模型时应使用的alpha值。此属性仅在模型不透明时才有意义:如果模型具有透明的材料或小于一的不透明度,则会使用表中的alpha值。

注意: 启用alpha混合可能会在实例重叠时造成渲染问题。有关详细信息,请参阅alpha混合和实例文档。

访问函数

boolhasTransparency() const
voidsetHasTransparency(bool hasTransparency)

通知信号

voidhasTransparencyChanged()

instanceCountOverride : int

将该属性设置为限制实例数量,而不重新生成或重新上传实例表。这允许以非常低廉的成本对渲染的实例数量进行动画处理。

访问函数

intinstanceCountOverride() const
voidsetInstanceCountOverride(int instanceCountOverride)

通知信号

voidinstanceCountOverrideChanged()

成员函数文档

[静态受保护] QQuick3DInstancing::InstanceTableEntry QQuick3DInstancing::calculateTableEntry(const QVector3D &position, const QVector3D &scale, const QVector3D &eulerRotation, const QColor &color, const QVector4D &customData = {})

位置 比例 欧拉旋转 颜色自定义数据 转换为标准顶点着色器预期的实例表格式。典型模式

QByteArray MyInstanceTable::getInstanceBuffer(int *instanceCount)
{
    QByteArray instanceData;

    ...

    auto entry = calculateTableEntry({xPos, yPos, zPos}, {xScale, yScale, zScale}, {xRot, yRot, zRot}, color, {});
    instanceData.append(reinterpret_cast<const char *>(&entry), sizeof(entry));

另请参阅 calculateTableEntryFromQuaternion.

[静态受保护] QQuick3DInstancing::InstanceTableEntry QQuick3DInstancing::calculateTableEntryFromQuaternion(const QVector3D &position, const QVector3D &scale, const QQuaternion &rotation, const QColor &color, const QVector4D &customData = {})

位置 比例 旋转 颜色自定义数据 转换为标准顶点着色器预期的实例表格式。

这与calculateTableEntry()相同,只不过使用四元数指定旋转。

[纯虚保护] QByteArray QQuick3DInstancing::getInstanceBuffer(int *instanceCount)

实现此函数以返回实例表格的内容。实例的数量应返回在 instanceCount 中。子类负责在必要时缓存结果。如果实例表格发生变化,子类应调用 markDirty().

[保护] void QQuick3DInstancing::markDirty()

标记实例数据已更改,必须重新上传。

另请参阅 getInstanceBufferinstanceCountOverride.

© 2024 Qt公司有限。此处包含的文档贡献是各自所有者的版权。此处提供的文档根据自由软件基金会在其发布的 GNU自由文档许可证版本1.3 的条款授权。Qt及其相关标志是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。