Qt Quick 3D - サブメッシュの例

マテリアルをサブメッシュに割り当てる方法を説明します。

この例では、マテリアルとサブメッシュがどのようにマッピングされるかを示します。

サブメッシュとマテリアル

Model が2つ以上のメッシュで構成されている場合、それらのメッシュはサブメッシュと呼ばれます。各サブメッシュは独自のマテリアルを持つことができますが、モデルごとに1つ以上のマテリアルを提供する必要はありません。サブメッシュの数がマテリアルの数より多い場合、materials のリストの最後のマテリアルが、すべての再作成サブメッシュに使用されます。つまり、リストの最初のマテリアルが最初のサブメッシュに適用され、2番目のマテリアルが2番目のサブメッシュに適用されます。モデル内でサブメッシュがどのように並べられるかは、そのモデルがどのように作成され、作成に使用された3Dモデリングツールによってエクスポートされたかに依存します。

次の例は、立方体の各辺がそれ自身のサブメッシュである、2つのディストアード立方体を示しています。

左側の立方体を見ると、1つの側面が赤で、残りの側面はであることがわかります。この理由はもちろん、マテリアルが赤と緑の2つしかないからです。私たちのモデルでは、最初のサブメッシュがたまたまディストアド・キューブの「トップ」側であり、赤いマテリアルがマテリアルリストの最初に配置されているので、予想通り赤い色になります。リストの2番目のマテリアルは緑色のマテリアルで、これは2番目のサブメッシュにマッピングされ、ディストアド・キューブの "手前 "の面であり、リストの最後のマテリアルなので、ディストアド・キューブの残りのすべての面に使用されるマテリアルにもなります。

DistortedCube {
    x: -4
    scale: Qt.vector3d(2, 2, 2)
    materials: [ PrincipledMaterial {
        baseColor: "red"
        lighting: PrincipledMaterial.NoLighting
    },
    PrincipledMaterial {
                    baseColor: "green"
                    lighting: PrincipledMaterial.NoLighting
                } ]

右側の立方体を見ると、さらに色が与えられていることがわかります。これはもちろん、6つのサブメッシュそれぞれに1つのマテリアルを用意し、それぞれを異なる色にしたからです。

Model {
    source: "qrc:/meshes/distortedcube.mesh"

    PrincipledMaterial {
        id: frontTop_material
        baseColor: "red"
        cullMode: Material.NoCulling
        lighting: PrincipledMaterial.NoLighting
    }

    PrincipledMaterial {
        id: frontBottom_material
        baseColor: "green"
        cullMode: Material.NoCulling
        lighting: PrincipledMaterial.NoLighting
    }

    PrincipledMaterial {
        id: leftSide_material
        baseColor: "blue"
        cullMode: Material.NoCulling
        lighting: PrincipledMaterial.NoLighting
    }

    PrincipledMaterial {
        id: rightSide_material
        baseColor: "pink"
        cullMode: Material.NoCulling
        lighting: PrincipledMaterial.NoLighting
    }

    PrincipledMaterial {
        id: backSide_material
        baseColor: "orange"
        cullMode: Material.NoCulling
        lighting: PrincipledMaterial.NoLighting
    }

    PrincipledMaterial {
        id: bottomSide_material
        baseColor: "navy"
        cullMode: Material.NoCulling
        lighting: PrincipledMaterial.NoLighting
    }

    materials: [
        frontTop_material,
        frontBottom_material,
        leftSide_material,
        backSide_material,
        rightSide_material,
        bottomSide_material
    ]
}

サンプルプロジェクト @ code.qt.io

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