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 |
| QVector3D | shadowBoundsMaximum() const |
| QVector3D | shadowBoundsMinimum() const |
Öffentliche Slots
| void | setDepthSortingEnabled(bool enabled) |
| void | setHasTransparency(bool hasTransparency) |
| void | setInstanceCountOverride(int instanceCountOverride) |
| void | setShadowBoundsMaximum(const QVector3D &newShadowBoundsMinimum) |
| void | setShadowBoundsMinimum(const QVector3D &newShadowBoundsMinimum) |
Signale
| void | depthSortingEnabledChanged() |
| void | hasTransparencyChanged() |
| void | instanceCountOverrideChanged() |
| void | shadowBoundsMaximumChanged() |
| void | shadowBoundsMinimumChanged() |
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 = {}) |
Ausführliche Beschreibung
Die Klasse „QQuick3DInstancing“ kann vererbt 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
Speichert den Wert für die aktivierte Tiefensortierung der Instanztabelle. Wenn diese Option aktiviert ist, werden die Instanzen von der am weitesten von der Kamera entfernten Instanz zur nächstgelegenen sortiert und gerendert, d. h. von hinten nach vorne. Ist diese Option deaktiviert (Standardeinstellung), werden die Instanzen in der Reihenfolge gerendert, in der sie in der Instanztabelle angegeben sind.
Hinweis: Die Instanzen werden nur untereinander sortiert. Sie werden nicht im Vergleich zu anderen Objekten in der Szene sortiert.
Hinweis: Die Sortierung verlängert 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 hat nur dann Auswirkungen, wenn das Modell undurchsichtig ist: Wenn das Modell einen transparenten „ material “ oder einen „ opacity “ von weniger als eins aufweist, wird in jedem Fall der Alpha-Wert aus der Tabelle verwendet.
Hinweis: Das Aktivieren von Alpha-Blending kann zu Darstellungsproblemen führen, wenn sich Instanzen überlappen. Weitere Informationen finden Sie in der Dokumentation zu Alpha-Blending und Instanzierung.
Zugriffsfunktionen:
| bool | hasTransparency() const |
| void | setHasTransparency(bool hasTransparency) |
Notifier-Signal:
| void | hasTransparencyChanged() |
instanceCountOverride : int
Setzen Sie diese Eigenschaft, um die Anzahl der Instanzen zu begrenzen, ohne die Instanztabelle neu zu generieren oder erneut hochzuladen. Dies ermöglicht eine sehr ressourcenschonende Animation der Anzahl der gerenderten Instanzen.
Zugriffsfunktionen:
| int | instanceCountOverride() const |
| void | setInstanceCountOverride(int instanceCountOverride) |
Benachrichtigungssignal:
| void | instanceCountOverrideChanged() |
[since 6.9] shadowBoundsMaximum : QVector3D
Legt die maximalen Grenzen fest, die bei der Berechnung der Schattenkartengrenzen der Modelle in der Instanztabelle verwendet werden.
Standardwert: (-1, -1, -1)
Hinweis: Diese Eigenschaft ist nur aktiviert, wenn die entsprechenden Komponenten von ` shadowBoundsMinimum ` kleiner sind als die in `shadowBoundsMaximum`. Andernfalls werden die Begrenzungen automatisch berechnet.
Diese Aufzählung wurde in Qt 6.9 eingeführt.
Zugriffsfunktionen:
| QVector3D | shadowBoundsMaximum() const |
| void | setShadowBoundsMaximum(const QVector3D &newShadowBoundsMinimum) |
Notifier-Signal:
| void | shadowBoundsMaximumChanged() |
Siehe auch ` shadowBoundsMinimum`.
[since 6.9] shadowBoundsMinimum : QVector3D
Legt die Mindestgrenzen fest, die bei der Berechnung der Schattenkartengrenzen der Modelle in der Instanztabelle verwendet werden.
Standardwert: (1, 1, 1)
Hinweis: Diese Eigenschaft ist nur aktiviert, wenn die entsprechenden Komponenten von `shadowBoundsMinimum` kleiner sind als die in ` shadowBoundsMaximum`. Andernfalls werden die Grenzen automatisch berechnet.
Diese Aufzählung wurde in Qt 6.9 eingeführt.
Zugriffsfunktionen:
| QVector3D | shadowBoundsMinimum() const |
| void | setShadowBoundsMinimum(const QVector3D &newShadowBoundsMinimum) |
Notifier-Signal:
| void | shadowBoundsMinimumChanged() |
Siehe auch „ shadowBoundsMaximum “.
Dokumentation der Mitgliedsfunktionen
[static protected] QQuick3DInstancing::InstanceTableEntry QQuick3DInstancing::calculateTableEntry(const QVector3D &position, const QVector3D &scale, const QVector3D &eulerRotation, const QColor &color, const QVector4D &customData = {})
Konvertiert die Dateien „ 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 Funktionen „ position “, „ scale “, „ rotation “, „ color “ und „ customData “ in das von den Standard-Vertex-Shadern erwartete Instanztabellenformat.
Dies entspricht der Funktion calculateTableEntry(), mit dem Unterschied, dass die Drehung mithilfe eines Quaternions angegeben 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 dafür verantwortlich, das Ergebnis bei Bedarf zwischenzuspeichern. Wenn sich die Instanztabelle ändert, sollte die Unterklasse ` markDirty()` aufrufen.
[protected] void QQuick3DInstancing::markDirty()
Beachten Sie, dass sich die Instanzdaten geändert haben und erneut hochgeladen werden müssen.
Siehe auch getInstanceBuffer und instanceCountOverride.
© 2026 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.