このページでは

ProceduralMesh QML Type

QML からジオメトリを作成できます。詳細...

Import Statement: import QtQuick3D.Helpers
Since: Qt 6.6
Inherits:

Geometry

プロパティ

詳細な説明

ProceduralMesh は、QML から Geometry インスタンスを作成できるようにするヘルパー型です。Geometry コンポーネントは抽象クラスであり、通常は C++ から作成されます。

component TorusMesh : ProceduralMesh {
    property real rings: 50
    property real segments: 50
    property real radius: 100.0
    property real tubeRadius: 10.0
    property var meshArrays: generateTorus(rings, segments, radius, tubeRadius)
    positions: meshArrays.verts
    normals: meshArrays.normals
    uv0s: meshArrays.uvs
    indexes: meshArrays.indices

    function generateTorus(rings: real, segments: real, radius: real, tubeRadius: real) {
        let verts = []
        let normals = []
        let uvs = []
        let indices = []

        for (let i = 0; i <= rings; ++i) {
            for (let j = 0; j <= segments; ++j) {
                let u = i / rings * Math.PI * 2;
                let v = j / segments * Math.PI * 2;

                let centerX = radius * Math.cos(u);
                let centerZ = radius * Math.sin(u);

                let posX = centerX + tubeRadius * Math.cos(v) * Math.cos(u);
                let posY = tubeRadius * Math.sin(v);
                let posZ = centerZ + tubeRadius * Math.cos(v) * Math.sin(u);

                verts.push(Qt.vector3d(posX, posY, posZ));

                let normal = Qt.vector3d(posX - centerX, posY, posZ - centerZ).normalized();
                normals.push(normal);

                uvs.push(Qt.vector2d(i / rings, j / segments));
            }
        }

        for (let i = 0; i < rings; ++i) {
            for (let j = 0; j < segments; ++j) {
                let a = (segments + 1) * i + j;
                let b = (segments + 1) * (i + 1) + j;
                let c = (segments + 1) * (i + 1) + j + 1;
                let d = (segments + 1) * i + j + 1;

                // Generate two triangles for each quad in the mesh
                // Adjust order to be counter-clockwise
                indices.push(a, d, b);
                indices.push(b, d, c);
            }
        }
        return { verts: verts, normals: normals, uvs: uvs, indices: indices }
    }
}

上記のコードは、Modelコンポーネントで使用するためのGeometryとして利用できるTorusMeshコンポーネントを定義しています。ring、segments、radius、またはtubeRadiusのプロパティが変更されると、ジオメトリが更新されます。

ProceduralMeshコンポーネントは、C++でGeometryを作成する場合ほど柔軟性やパフォーマンスに優れてはいませんが、その代わりに利便性と簡潔さを兼ね備えています。プロパティは固定された属性リストとなっており、値を設定すると必要なバッファが自動的に生成されます。

プロパティのドキュメント

binormals : List<QVector3D>

binormals 属性リストを保持します。

colors : List<QVector4D>

このプロパティは、頂点色の値のリストを定義します。

indexes : List<int>

このプロパティは、属性リストへのインデックスのリストを定義します。このリストが空のままの場合、頂点バッファの値が直接使用されます。

joints : List<QVector4D>

このプロパティは、スキニング用のジョイントインデックスのリストを定義します。

normals : List<QVector3D>

法線属性のリストを保持します。

positions : List<QVector3D>

「positions」属性のリスト。このリストが空のままの場合、ジオメトリは生成されません。

primitiveMode : enumeration [default: ProceduralMesh.Triangles]

このプロパティは、ジオメトリをレンダリングする際に使用するプリミティブモードを定義します。

定数説明
ProceduralMesh.Points「ポイント」プリミティブモードが使用されます。
ProceduralMesh.LineStrip「ラインストリップ」プリミティブモードが使用されます。
ProceduralMesh.Lines「lines」プリミティブモードが使用されます。
ProceduralMesh.TriangleStrip「三角形ストリップ」プリミティブモードが使用されます。
ProceduralMesh.TriangleFan「triangle fan」プリミティブモードが使用されます。
ProceduralMesh.Triangles「triangles」プリミティブモードが使用されます。

注: すべてのレンダリングバックエンドですべてのモードがサポートされているわけではありません 。

subsets : List<ProceduralMeshSubset>

このプロパティは、ジオメトリデータを分割するサブセットのリストを定義します。各サブセットには、それぞれ独自のマテリアルを割り当てることができます。この配列の順序は、このジオメトリを使用する際の「Model」のマテリアルリストに対応します。

このプロパティはオプションであり、空の場合、サブセットは1つだけになります。

注: 利用可能な頂点/インデックス値の範囲外の値を指定したサブセットは 、そのサブセットが無視されます。

tangents : List<QVector3D>

「tangents」属性リストを保持します。

uv0s : List<QVector2D>

このプロパティは、最初のUVチャンネル(uv0)のUV座標のリストを定義します。

uv1s : List<QVector2D>

このプロパティは、2番目のUVチャンネル(uv1)のUV座標のリストを定義します。

weights : List<QVector4D>

このプロパティは、スキニング用のジョイントウェイトのリストを定義します。

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