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 ().
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 () |
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 () |
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 .