【译】glTF教程:网格(九)

【译】glTF教程:网格(九)

2019-02-15

网格

上一节中的示例:简单格网示例展示了 [mesh]的一个基本示例。(https://github.com/khronosgroup/gltf/tree/master/speciation/2.0/# reference-primitive)与包含多个属性的mesh.primitive对象。本节将解释网格原语的含义和用法,网格如何连接到场景图的节点,以及如何使用不同的材质渲染它们。

网格基本体(网格原始对象)

每个mesh包含一个 mesh.primitive对象。网格基本体。这些网格基本对象是较大对象的较小部分或构建块。网格原语总结了关于如何呈现对象的各个部分的所有信息。

网格原始属性

网格原语使用其 attributes 字典定义对象的几何数据。这个几何数据是由包含顶点属性数据的accessor对象的引用提供的。accessor概念的细节在缓冲区、缓冲视图和访问器一节中进行了解释。

在给定的示例中,attributes字典中有两个条目。条目引用positionsAccessornormalsAccessor:

  "meshes" : [
    {
      "primitives" : [ {
        "attributes" : {
          "POSITION" : 1,
          "NORMAL" : 2
        },
        "indices" : 0
      } ]
    }
  ],

这些访问器的元素一起定义属于各个顶点的属性,如图9a所示。


图9a:包含顶点数据的网格原语访问器。

索引和非索引几何

网格的几何数据。 mesh.primitive可以是 indexed几何图形,也可以是没有索引的几何图形。在给定的例子中,网格。 mesh.primitive包含 indexed几何。这由“indexes”属性表示,该属性引用索引0的访问器,定义索引的数据。对于非索引几何图形,省略此属性。

网格原始模式

默认情况下,几何数据被假定为描述一个三角形网格。对于indexed几何结构,这意味着假定indexed访问器的三个连续元素包含单个三角形的索引。对于非索引几何,顶点属性访问器的三个元素假设包含三角形的三个顶点的属性。

还可以使用其他呈现模式:几何数据也可以描述单独的点、线或三角形条。这是由可能存储在mesh原语中的 mode指示的。它的值是一个常量,指示几何数据必须如何解释。例如,当几何图形由点组成时,模式可以是“0”,当几何图形由三角形组成时,模式可以是“4”。这些常量分别对应于GL常量POINTSTRIANGLES。看到primitive.mode specification,以获取可用模式的列表。

网的原始材料

网格原语也可以引用应该用于渲染的material,使用该材质的索引。在给定的示例中,没有定义material,这导致使用默认材质呈现对象,该默认材质仅定义对象具有统一的50%灰色。在材质 小节中,将对材料及其相关概念进行详细解释。

连接到节点的网格

示例:简单格网部分的示例中,有一个单独的 scene,其中包含两个节点,两个节点都指向同一个mesh实例,该实例的索引为0:

  "scenes" : [
    {
      "nodes" : [ 0, 1]
    }
  ],
  "nodes" : [
    {
      "mesh" : 0
    },
    {
      "mesh" : 0,
      "translation" : [ 1.0, 0.0, 0.0 ]
    }
  ],
  
  "meshes" : [
    { ... } 
  ],

第二个节点有一个translation属性。如场景和节点部分所示,它将用于计算该节点的本地转换矩阵。在这种情况下,矩阵将导致沿x轴平移1.0。节点的所有局部转换的乘积将生成全局转换。所有附加到节点上的元素都将使用这个全局转换进行呈现。

在这个例子中,网格将被渲染两次,因为它被附加到两个节点上:一次是第一个节点的全局变换,也就是恒等变换,另一次是第二个节点的全局变换,也就是沿着x轴平移1.0。