QQuick3DInstancing Class

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

Header: #include <QQuick3DInstancing>
Since: Qt 6.2
In QML: Instancing
Inherits: QQuick3DObject

属性

公共功能

bool depthSortingEnabled() const
bool hasTransparency() const
int instanceCountOverride() const
QVector3D shadowBoundsMaximum() const
QVector3D shadowBoundsMinimum() const

公共插槽

void setDepthSortingEnabled(bool enabled)
void setHasTransparency(bool hasTransparency)
void setInstanceCountOverride(int instanceCountOverride)
void setShadowBoundsMaximum(const QVector3D &newShadowBoundsMinimum)
void setShadowBoundsMinimum(const QVector3D &newShadowBoundsMinimum)

信号

受保护函数

virtual QByteArray getInstanceBuffer(int *instanceCount) = 0
void markDirty()

静态受保护成员

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

详细说明

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

该类是抽象类:要使用它,请创建一个子类并实现getInstanceBuffer().

属性文档

depthSortingEnabled : bool

保存实例表的深度排序启用值。启用后,将对实例进行排序,并从距离摄像机最近的实例开始渲染,即从后到前。如果禁用(默认值),则按照实例表中指定的顺序渲染实例。

注: 实例之间只进行排序。不会根据场景中的其他对象对实例进行排序。

注意: 排序会增加帧准备时间,尤其是在实例数量较多时。

访问功能:

bool depthSortingEnabled() const
void setDepthSortingEnabled(bool enabled)

通知信号

void depthSortingEnabledChanged()

hasTransparency : bool

如果实例化表中包含渲染模型时应使用的 alpha 值,则将此属性设置为 true。此属性只有在模型不透明的情况下才会起作用:如果模型是透明的material ,或opacity 小于 1,则无论如何都将使用表中的 alpha 值。

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

访问功能:

bool hasTransparency() const
void setHasTransparency(bool hasTransparency)

通知信号

void hasTransparencyChanged()

instanceCountOverride : int

设置此属性可限制实例数量,而无需重新生成或重新上传实例表。这样就能以非常低廉的成本动画渲染实例的数量。

访问功能:

int instanceCountOverride() const
void setInstanceCountOverride(int instanceCountOverride)

Notifier 信号:

void instanceCountOverrideChanged()

成员函数文档

[static protected] QQuick3DInstancing::InstanceTableEntry QQuick3DInstancing::calculateTableEntry(const QVector3D &position, const QVector3D &scale, const QVector3D &eulerRotation, const QColor &color, const QVector4D &customData = {})

position scale eulerRotation colorcustomData 转换为标准顶点着色器所期望的实例表格式。典型模式:

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

[static protected] QQuick3DInstancing::InstanceTableEntry QQuick3DInstancing::calculateTableEntryFromQuaternion(const QVector3D &position, const QVector3D &scale, const QQuaternion &rotation, const QColor &color, const QVector4D &customData = {})

position scale rotation colorcustomData 转换为标准顶点着色器所期望的实例表格式。

除了使用四元数来指定旋转外,它与calculateTableEntry() 相同。

[pure virtual protected] QByteArray QQuick3DInstancing::getInstanceBuffer(int *instanceCount)

执行此函数可返回实例表的内容。实例的数量应以instanceCount 的形式返回。如有必要,子类应负责缓存结果。如果实例表发生变化,子类应调用markDirty() 。

[protected] void QQuick3DInstancing::markDirty()

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

另请参阅 getInstanceBufferinstanceCountOverride

© 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.