Qt Quick 3D - 子网格示例
演示如何为子网格分配材质。

本示例演示了材质与子网格的映射关系。
子网格与材质
当一个Model 由两个或多个网格构成时,这些网格被称为子网格。 每个子网格可以拥有自己的材质,但每个模型无需提供多个材质。如果子网格数量多于材质数量,则materials 列表中的最后一个材质将应用于所有剩余的子网格。 当模型为每个子网格提供一种材质时,这些材质将按“一对一”的方式映射,即列表中的第一种材质应用于第一个子网格,第二种材质应用于第二个子网格,以此类推。 模型中子网格的排序取决于创建该模型的 3D 建模工具的创建和导出方式。
以下示例展示了两个变形的立方体,其中立方体的每一面都是一个独立的子网格。
如果我们观察左侧的立方体,可以看到其中一面是红色的,而其余各面都是绿色的,原因当然是材质列表中只有两种材质,即一种红色和一种绿色。 在我们的模型中,第一个子网格恰好是变形立方体的“顶面”,由于红色材质在材质列表中排在首位,因此该面如预期般呈现红色。 列表中的第二种材质是绿色材质,它被映射到第二个子网格上,即变形立方体的“正面”;由于它是列表中的最后一种材质,因此也将作为变形立方体所有剩余面的材质使用。

DistortedCube {
x: -4
scale: Qt.vector3d(2, 2, 2)
materials: [ PrincipledMaterial {
baseColor: "red"
lighting: PrincipledMaterial.NoLighting
},
PrincipledMaterial {
baseColor: "green"
lighting: PrincipledMaterial.NoLighting
} ]观察右侧的立方体,我们可以发现它被赋予了更多颜色,这当然是因为我们现在为六个子网格各提供了一种材质,每种材质都有不同的颜色。

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