QQuick3DInstancing Class
Basisklasse zur Definition von Instanztabellen. Mehr...
Header: | #include <QQuick3DInstancing> |
Since: | Qt 6.2 |
In QML: | Instancing |
Inherits: | QQuick3DObject |
Eigenschaften
- depthSortingEnabled : bool
- hasTransparency : bool
- instanceCountOverride : int
Ö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
void | depthSortingEnabledChanged() |
void | hasTransparencyChanged() |
void | instanceCountOverrideChanged() |
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.