如何在 gltf 中指定网格上的面?

How to specify a face on a mesh in gltf?

我希望能够在 glTF 文件中引用特定网格上的特定面。然而,我对原语的概念感到困惑。通常,我会使用人脸索引(即在 three.js 中)并且我总是能够引用同一张脸。然而,有时 glTF 中的网格有多个基元。这些是否使用相同的面部缓冲区?他们至少使用连续的人脸缓冲区吗?我想知道我是否可以仅使用一个数字(即面索引)来引用网格中的面,或者我是否还需要使用原始索引。

网格图元是否共享一个顶点池?

单个网格中的两个 glTF 图元可以相关或不相关,这与每个包含单个图元的两个 glTF 网格相同。两个基元可以有:

  • 顶点属性相同但索引不同。
  • 相同的顶点属性和索引,但材质不同。
  • 没有共享顶点属性或索引
  • 完全不同的绘制模式(点、线、三角形……)

因此,除非您完全控制要加载的文件,否则默认和最安全的假设是将每个图元视为一个完全独立的网格。如果您想检查更多特定情况(如上面的前两个项目符号),您可以随时将其添加为以后的优化。

如果您要将 glTF 文件加载到 threejs 中,每个基元将成为一个单独的 THREE.Mesh 在公共 THREE.Group.

有关详细信息,请参阅 glTF specification section on Meshes