QQuick3DInstancing Class

Basisklasse zur Definition von Instanztabellen. Mehr...

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

Eigenschaften

Öffentliche Funktionen

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

Öffentliche Slots

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

Signale

Geschützte Funktionen

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

Statische geschützte Mitglieder

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

Detaillierte Beschreibung

Die Klasse QQuick3DInstancing kann geerbt werden, um eine benutzerdefinierte Instanztabelle für ein Modell in der Szene Qt Quick 3D festzulegen.

Diese Klasse ist abstrakt: Um sie zu verwenden, erstellen Sie eine Unterklasse und implementieren Sie getInstanceBuffer().

Dokumentation der Eigenschaften

depthSortingEnabled : bool

Enthält den Wert für die aktivierte Tiefensortierung für die Instanztabelle. Wenn aktiviert, werden die Instanzen sortiert und von der am weitesten von der Kamera entfernten Instanz zur nächstgelegenen gerendert, d. h. von hinten nach vorne. Wenn der Wert deaktiviert ist, was die Standardeinstellung ist, werden die Instanzen in der Reihenfolge gerendert, in der sie in der Instanztabelle angegeben sind.

Hinweis: Die Instanzen werden nur gegeneinander sortiert. Die Instanzen werden nicht gegen andere Objekte in der Szene sortiert.

Hinweis: Die Sortierung erhöht die Frame-Vorbereitungszeit, insbesondere bei einer großen Anzahl von Instanzen.

Zugriffsfunktionen:

bool depthSortingEnabled() const
void setDepthSortingEnabled(bool enabled)

Notifier-Signal:

void depthSortingEnabledChanged()

hasTransparency : bool

Setzen Sie diese Eigenschaft auf true, wenn die Instanzierungstabelle Alpha-Werte enthält, die beim Rendern des Modells verwendet werden sollen. Diese Eigenschaft macht nur einen Unterschied, wenn das Modell undurchsichtig ist: Wenn das Modell eine transparente material oder eine opacity kleiner als eins hat, wird der Alphawert aus der Tabelle trotzdem verwendet.

Hinweis: Das Aktivieren von Alpha-Blending kann zu Rendering-Problemen führen, wenn sich Instanzen überlappen. Siehe die Alpha-Blending und Instanzierung Dokumentation für Details.

Zugriffsfunktionen:

bool hasTransparency() const
void setHasTransparency(bool hasTransparency)

Melder-Signal:

void hasTransparencyChanged()

instanceCountOverride : int

Setzen Sie diese Eigenschaft, um die Anzahl der Instanzen zu begrenzen, ohne die Instanztabelle neu zu generieren oder neu zu laden. Dies ermöglicht eine sehr kostengünstige Animation der Anzahl der gerenderten Instanzen.

Zugriffsfunktionen:

int instanceCountOverride() const
void setInstanceCountOverride(int instanceCountOverride)

Benachrichtigungssignal:

void instanceCountOverrideChanged()

Member Function Dokumentation

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

Konvertiert die position scale eulerRotation color und customData in das von den Standard-Vertex-Shadern erwartete Instanztabellenformat. Typisches Muster:

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));

Siehe auch calculateTableEntryFromQuaternion.

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

Konvertiert die position scale rotation color und customData in das Instanztabellenformat, das von den Standard-Vertex-Shadern erwartet wird.

Dies ist dasselbe wie calculateTableEntry(), mit der Ausnahme, dass ein Quaternion zur Angabe der Drehung verwendet wird.

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

Implementieren Sie diese Funktion, um den Inhalt der Instanztabelle zurückzugeben. Die Anzahl der Instanzen sollte in instanceCount zurückgegeben werden. Die Unterklasse ist für die Zwischenspeicherung des Ergebnisses verantwortlich, falls erforderlich. Wenn sich die Instanztabelle ändert, sollte die Unterklasse markDirty() aufrufen.

[protected] void QQuick3DInstancing::markDirty()

Kennzeichnen Sie, dass sich die Instanzdaten geändert haben und erneut hochgeladen werden müssen.

Siehe auch getInstanceBuffer und instanceCountOverride.

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