ProceduralMesh QML 类型
允许从 QML 创建几何体。更多信息...
导入声明 | import QtQuick3D.Helpers |
自 | Qt 6.6 |
继承 |
属性
- binormals : List<QVector3D>
- colors : List<QVector4D>
- indexes : List<int>
- joints : List<QVector4D>
- normals : List<QVector3D>
- positions : List<QVector3D>
- primitiveMode : 枚举
- subsets : List<ProceduralMeshSubset>
- tangents : List<QVector3D>
- uv0s : List<QVector2D>
- uv1s : List<QVector2D>
- weights : List<QVector4D>
详细描述
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 } } }
以上代码定义了一个组件 TorusMesh,它可以作为 Geometry 与 Model 组件一起使用。当修改环、段、半径或 tubeRadius 属性时,几何体将被更新。
ProceduralMesh 组件不如在 C++ 中创建 Geometry 那样灵活或高效,但它以便利和简单性弥补了这一点。属性是固定的属性列表,当填写时将自动生成必要的缓冲区。
属性文档
binormals : List<QVector3D> |
包含双法线属性列表。
colors : List<QVector4D> |
此属性定义了一个顶点颜色值的列表。
indexes : List<int> |
此属性定义了一个指向属性列表的索引列表。如果此列表为空,则将直接使用顶点缓冲区值。
joints : List<QVector4D> |
此属性定义了一个用于皮肤化的关节索引列表。
normals : List<QVector3D> |
包含法线属性列表。
positions : List<QVector3D> |
位置属性列表。如果此列表为空,则不会生成几何体。
primitiveMode : 枚举 |
此属性定义了渲染几何形状时使用的原始模式。
常量 | 描述 |
---|---|
ProceduralMesh.Points | 使用了点原始模式。 |
ProceduralMesh.LineStrip | 使用了线段原始模式。 |
ProceduralMesh.Lines | 使用了线条原始模式。 |
ProceduralMesh.TriangleStrip | 使用了三角形带原始模式。 |
ProceduralMesh.TriangleFan | 使用了三角形扇原始模式。 |
ProceduralMesh.Triangles | 使用了三角形原始模式。 |
注意: 并非所有模式在所有渲染后端上都受到支持。
subsets : List<ProceduralMeshSubset> |
此属性定义了一个要分割几何数据的子集列表。每个子集都可以有自己的材质。此数组顺序对应于在使用此几何形状的模型时材质列表。
此属性是可选的,当为空时,结果为一个单一子集。
注意: 任何指定超出可用的顶点/索引值范围的值的子集都将导致该子集被忽略。
tangents : List<QVector3D> |
包含法线属性列表。
uv0s : List<QVector2D> |
此属性定义了一个用于第一个uv通道(uv0)的uv坐标列表。
uv1s : List<QVector2D> |
此属性定义了一个用于第二个uv通道(uv1)的uv坐标列表。
weights : List<QVector4D> |
此属性定义了一个用于蒙皮关节权重的列表。
© 2024 The Qt Company Ltd. 本文件中包含的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布的《GNU自由文档许可证版本1.3》条款获许可。Qt及其相关标志是The Qt Company Ltd.在芬兰和/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。