Класс QQuick3DInstancing
Базовый класс для определения таблиц экземпляров. Подробнее...
| Заголовок: | #include <QQuick3DInstancing> |
| С тех пор: | Qt 6.2 |
| Инициализируется: | Экземпляризация |
| Наследует: | QQuick3DObject |
Свойства
- depthSortingEnabled : bool
- hasTransparency : bool
- instanceCountOverride : int
Открытые функции
| 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 = {}) |
Подробное описание
Класс QQuick3DInstancing может быть унаследован для указания пользовательской таблицы экземпляров для модели в сцене Qt Quick 3D.
Этот класс является абстрактным: для его использования создайте подкласс и реализуйте getInstanceBuffer().
Документация по свойствам
depthSortingEnabled : bool
Содержит значение depth sorting, включенного для таблицы экземпляров. При включенном значении, экземпляры сортируются и отрисовываются от самого удаленного экземпляра от камеры к ближайшему, т.е. сзади-наперёд. Если выключено, что является значением по умолчанию, экземпляры отрисовываются в порядке их указания в таблице экземпляров.
Примечание: Экземпляры сортируются только между собой. Экземпляры не сортируются по отношению к другим объектам в сцене.
Примечание: Сортировка увеличивает время подготовки кадра, особенно при большом количестве экземпляров.
Функции доступа:
| bool | depthSortingEnabled() const |
| void | setDepthSortingEnabled(bool enabled) |
Сигнал уведомления:
| void | depthSortingEnabledChanged() |
hasTransparency : bool
Установите это свойство в значение true, если таблица экземпляров содержит значения альфа, которые должны использоваться при отрисовке модели. Это свойство имеет значение только если модель непрозрачная: Если у модели есть прозрачный материал, или значение прозрачности меньше единицы, значение альфа из таблицы будет использоваться независимо.
Примечание: Включение альфа-смешивания может вызвать проблемы с отрисовкой, когда экземпляры перекрываются. См. документацию по альфа-смешиванию и экземпляризации для получения подробностей.
Функции доступа:
| bool | hasTransparency() const |
| void | setHasTransparency(bool hasTransparency) |
Сигнал уведомления:
| void | hasTransparencyChanged() |
instanceCountOverride : int
Установите это свойство, чтобы ограничить количество экземпляров, не перегенерируя или не перезагружая таблицу экземпляров. Это позволяет очень недорогую анимацию количества отрисовываемых экземпляров.
Функции доступа:
| 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 и customData в формат таблицы экземпляров, ожидаемый стандартными шейдерами вершин. Типичный шаблон:
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 и customData в формат таблицы экземпляров, ожидаемый стандартными шейдерами вершин.
Это то же самое, что и calculateTableEntry(), но с использованием кватерниона для указания вращения.
[pure virtual protected] QByteArray QQuick3DInstancing::getInstanceBuffer(int *instanceCount)
Реализуйте эту функцию для возврата содержимого таблицы экземпляров. Количество экземпляров должно быть возвращено в instanceCount. Подкласс отвечает за кэширование результата при необходимости. Если таблица экземпляров изменяется, подкласс должен вызвать markDirty().
[protected] void QQuick3DInstancing::markDirty()
Пометить, что данные экземпляров изменились и должны быть загружены заново.
См. также getInstanceBuffer и instanceCountOverride.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qquick3dinstancing.html