ProceduralMesh QML Type
Ermöglicht die Erstellung von Geometrien aus QML. Mehr...
Import Statement: | import QtQuick3D.Helpers |
Since: | Qt 6.6 |
Inherits: |
Eigenschaften
- binormals : List<QVector3D>
- colors : List<QVector4D>
- indexes : List<int>
- joints : List<QVector4D>
- normals : List<QVector3D>
- positions : List<QVector3D>
- primitiveMode : enumeration
- subsets : List<ProceduralMeshSubset>
- tangents : List<QVector3D>
- uv0s : List<QVector2D>
- uv1s : List<QVector2D>
- weights : List<QVector4D>
Detaillierte Beschreibung
ProceduralMesh ist ein Hilfstyp, der die Erstellung von Geometrie-Instanzen aus QML ermöglicht. Die Geometry-Komponente ist abstrakt und wird normalerweise mit C++ erstellt.
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 } } }
Der obige Code definiert eine Komponente TorusMesh, die als Geometry für die Verwendung mit einer Model-Komponente verwendet werden kann. Wenn die Eigenschaften Ring, Segmente, Radius oder TubeRadius geändert werden, wird die Geometrie aktualisiert.
Die Komponente ProceduralMesh ist weder so flexibel noch so leistungsfähig wie die Erstellung von Geometrie in C++, macht dies aber durch Komfort und Einfachheit wett. Bei den Eigenschaften handelt es sich um feste Attributlisten, die, wenn sie gefüllt werden, automatisch die erforderlichen Puffer erzeugen.
Eigenschaft Dokumentation
binormals : List<QVector3D> |
Enthält die binormale Attributliste.
colors : List<QVector4D> |
Diese Eigenschaft definiert eine Liste von Vertex-Farbwerten.
indexes : List<int> |
Diese Eigenschaft definiert eine Liste von Indizes in den Attributlisten. Wenn diese Liste leer bleibt, werden die Werte der Scheitelpunktpuffer direkt verwendet.
joints : List<QVector4D> |
Diese Eigenschaft definiert eine Liste von Joint-Indizes für das Skinning.
normals : List<QVector3D> |
Enthält die Liste der Normalen-Attribute.
positions : List<QVector3D> |
Die Liste der Positionsattribute. Wenn diese Liste leer bleibt, wird keine Geometrie erzeugt.
primitiveMode : enumeration |
Diese Eigenschaft definiert den primitiven Modus, der beim Rendern der Geometrie verwendet wird.
Konstante | Beschreibung |
---|---|
ProceduralMesh.Points | Es wird der primitive Modus Punkte verwendet. |
ProceduralMesh.LineStrip | Es wird der primitive Modus "Linienstreifen" verwendet. |
ProceduralMesh.Lines | Es wird der primitive Modus "Linien" verwendet. |
ProceduralMesh.TriangleStrip | Es wird der primitive Modus Dreiecksstreifen verwendet. |
ProceduralMesh.TriangleFan | Es wird der primitive Modus Dreiecksfächer verwendet. |
ProceduralMesh.Triangles | Es wird der primitive Modus Dreiecke verwendet. |
Hinweis: Nicht alle Modi werden von allen Rendering-Backends unterstützt.
subsets : List<ProceduralMeshSubset> |
Diese Eigenschaft definiert eine Liste von Teilmengen, in die die Geometriedaten aufgeteilt werden. Jede Untergruppe kann ihr eigenes Material haben. Die Reihenfolge dieses Arrays entspricht der Materialliste von Model, wenn diese Geometrie verwendet wird.
Diese Eigenschaft ist optional und ergibt, wenn sie leer ist, eine einzige Teilmenge.
Hinweis: Jede Untergruppe, die Werte außerhalb des Bereichs der verfügbaren Scheitelpunkt-/Indexwerte angibt, führt dazu, dass diese Untergruppe ignoriert wird.
tangents : List<QVector3D> |
Enthält die Liste der Tangenten-Attribute.
uv0s : List<QVector2D> |
Diese Eigenschaft definiert eine Liste von uv-Koordinaten für den ersten uv-Kanal (uv0)
uv1s : List<QVector2D> |
Diese Eigenschaft definiert eine Liste von uv-Koordinaten für den zweiten uv-Kanal (uv1)
weights : List<QVector4D> |
Diese Eigenschaft definiert eine Liste von Gelenkgewichten für das Skinning.
© 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.