QQuick3DInstancing Class

インスタンス・テーブルを定義するための基底クラス。詳細...

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

プロパティ

パブリック機能

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

パブリックスロット

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

シグナル

保護された関数

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シーンの Model のカスタムインスタンステーブルを指定するために継承することができます。

このクラスは抽象です:これを使用するには、サブクラスを作成し、getInstanceBuffer ()を実装してください。

プロパティ ドキュメント

depthSortingEnabled : bool

インスタンステーブルの深度ソート有効値を保持します。有効な場合、インスタンスはカメラから最も遠いインスタンスから最も近いインスタンスへ、つまり背面から前面へソートされレンダリングされます。無効(デフォルト)の場合、インスタンスはインスタンステーブルで指定された順序でレンダリングされます。

注意: インスタンスは互いに対してのみソートされます。インスタンスはシーン内の他のオブジェクトに対してソートされません。

注意 :ソートは、特にインスタンス数が多い場合、フレームの準備時間を増加させます。

アクセス関数

bool depthSortingEnabled() const
void setDepthSortingEnabled(bool enabled)

通知シグナル:

void depthSortingEnabledChanged()

hasTransparency : bool

モデルをレンダリングするときに使用されるべきアルファ値がインスタンス化テーブルに含まれている場合、このプロパティをtrueに設定します。このプロパティはモデルが不透明な場合にのみ違いが生じます:モデルが透明な場合material 、またはopacity が1より小さい場合、テーブルからのアルファ値が関係なく使用されます。

注意: アルファブレンディングを有効にすると、インスタンスが重なったときにレンダリングの問題が発生することがあります。詳しくはアルファブレンディングとインスタンスのドキュメントを参照してください。

アクセス関数

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も参照のこと

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