QQuick3DInstancing Class

Base class for defining instance tables. 更多...

头: #include <QQuick3DInstancing>
Since: Qt 6.2
实例化: Instancing
继承: QQuick3DObject

特性

公共函数

bool depthSortingEnabled () const
bool hasTransparency () const
int instanceCountOverride () const

公共槽

void setDepthSortingEnabled (bool enabled )
void setHasTransparency (bool hasTransparency )
void setInstanceCountOverride (int instanceCountOverride )

信号

void depthSortingEnabledChanged ()
void hasTransparencyChanged ()
void instanceCountOverrideChanged ()

保护函数

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 = {})

详细描述

The QQuick3DInstancing class can be inherited to specify a custom instance table for a Model in the Qt Quick 3D scene.

This class is abstract: To use it, create a subclass and implement getInstanceBuffer ().

特性文档编制

depthSortingEnabled : bool

Holds the depth sorting enabled value for the instance table. When enabled, instances are sorted and rendered from the furthest instance from the camera to the nearest i.e. back-to-front. If disabled, which is the default, instances are rendered in the order they are specified in the instance table.

注意: The instances are only sorted against each other. Instances are not sorted against other objects in the scene.

注意: The sorting increases the frame preparation time especially with large instance counts.

访问函数:

bool depthSortingEnabled () const
void setDepthSortingEnabled (bool enabled )

通知程序信号:

void depthSortingEnabledChanged ()

hasTransparency : bool

Set this property to true if the instancing table contains alpha values that should be used when rendering the model. This property only makes a difference if the model is opaque: If the model has a transparent material ,或 opacity less than one, the alpha value from the table will be used regardless.

注意: Enabling alpha blending may cause rendering issues when instances overlap. See the alpha blending and instancing 文档编制了解细节。

访问函数:

bool hasTransparency () const
void setHasTransparency (bool hasTransparency )

通知程序信号:

void hasTransparencyChanged ()

instanceCountOverride : int

Set this property to limit the number of instances without regenerating or re-uploading the instance table. This allows very inexpensive animation of the number of instances rendered.

访问函数:

int instanceCountOverride () const
void setInstanceCountOverride (int instanceCountOverride )

通知程序信号:

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 color and customData to the instance table format expected by the standard vertex shaders. Typical pattern:

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 color and customData to the instance table format expected by the standard vertex shaders.

这如同 calculateTableEntry (), except for using a quaternion to specify the rotation.

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

Implement this function to return the contents of the instance table. The number of instances should be returned in instanceCount . The subclass is responsible for caching the result if necessary. If the instance table changes, the subclass should call markDirty ().

[protected] void QQuick3DInstancing:: markDirty ()

Mark that the instance data has changed and must be uploaded again.

另请参阅 getInstanceBuffer and instanceCountOverride .