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)

Notifier シグナル:

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も参照してください

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。