最小的glTF文件

下面是一个最小但完整的glTF资产,包含一个单独的索引三角形。您可以复制并粘贴到gltf文件,每个基于glTF的应用程序都应该能够加载和呈现它。本节将基于这个例子解释glTF的基本概念。

{
  "scenes" : [
    {
      "nodes" : [ 0 ]
    }
  ],

  "nodes" : [
    {
      "mesh" : 0
    }
  ],

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

  "buffers" : [
    {
      "uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
      "byteLength" : 44
    }
  ],
  "bufferViews" : [
    {
      "buffer" : 0,
      "byteOffset" : 0,
      "byteLength" : 6,
      "target" : 34963
    },
    {
      "buffer" : 0,
      "byteOffset" : 8,
      "byteLength" : 36,
      "target" : 34962
    }
  ],
  "accessors" : [
    {
      "bufferView" : 0,
      "byteOffset" : 0,
      "componentType" : 5123,
      "count" : 3,
      "type" : "SCALAR",
      "max" : [ 2 ],
      "min" : [ 0 ]
    },
    {
      "bufferView" : 1,
      "byteOffset" : 0,
      "componentType" : 5126,
      "count" : 3,
      "type" : "VEC3",
      "max" : [ 1.0, 1.0, 0.0 ],
      "min" : [ 0.0, 0.0, 0.0 ]
    }
  ],

  "asset" : {
    "version" : "2.0"
  }
}

triangle

这个scene节点结构

这个scene是存储在glTF中的场景描述的入口点。解析glTF JSON文件时,场景结构的遍历将从这里开始。每个场景都包含一个名为节点,其中包含node物体。这些节点是场景图层次的根节点。

这里的示例由一个场景组成。它指的是本例中唯一的节点,即索引为0的节点。而该节点又指索引为0的唯一网格:

 "scenes" : [
    {
      "nodes" : [ 0 ]
    }
  ],

  "nodes" : [
    {
      "mesh" : 0
    }
  ],

有关场景和节点及其属性的详细信息将在场景和节点第节

这个meshes

Amesh表示出现在场景中的实际几何对象。网格本身通常没有任何属性,但只包含mesh.primitive对象,作为较大模型的构建块。每个网格图元都包含网格所包含的几何体数据的描述。

该示例由一个网格组成,并且有一个mesh.primitive对象。网格基本体有一个数组属性. 这些是网格几何体顶点的属性,在本例中,这只是POSITION属性,描述顶点的位置。基本体描述网格索引几何图形,由indices财产。默认情况下,假设它描述一组三角形,因此三个连续的索引是一个三角形顶点的索引。

网格图元的实际几何数据由attributes以及指数. 它们都是指accessor对象,将在下面解释

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

有关网格和网格基本体的详细描述,请参见网格第节

这个buffer ,bufferView,和accessor概念

这个buffer ,bufferView,和accessor对象提供有关网格基本体所包含的几何体数据的信息。基于具体的例子,我们很快就介绍了它们。有关这些概念的更详细的描述将在缓冲区、缓冲区视图和访问器

缓冲器

Abuffer非结构化数据定义了一个没有固有意义的原始数据块。它包含一个uri,它可以指向包含数据的外部文件,也可以是数据URI它直接在JSON文件中对二进制数据进行编码。

在示例文件中,使用第二种方法:有一个包含44个字节的缓冲区,该缓冲区的数据被编码为数据URI:

"buffers" : [
    {
      "uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
      "byteLength" : 44
    }
  ],

此数据包含三角形的索引和三角形的顶点位置。但是为了实际使用这些数据作为网格图元的几何数据,有关结构此数据是必需的。有关结构的信息编码在bufferView存取器物体

缓冲区视图

AbufferView描述整个原始缓冲区数据的“块”或“片”。在给定的示例中,有两个缓冲区视图。它们都指向同一个缓冲区。第一个缓冲区视图是指包含索引数据的缓冲区部分:它有一个字节偏移量表示整个缓冲区数据的0,以及byteLength第二个缓冲区视图是指包含顶点位置的缓冲区部分。从a开始字节偏移量有一个byteLength36个;也就是说,它延伸到整个缓冲区的末尾。

"bufferViews" : [
    {
      "buffer" : 0,
      "byteOffset" : 0,
      "byteLength" : 6,
      "target" : 34963
    },
    {
      "buffer" : 0,
      "byteOffset" : 8,
      "byteLength" : 36,
      "target" : 34962
    }
  ],

访问器

结构数据的第二步是用accessor物体。它们定义了缓冲视图必须通过提供有关数据类型和布局的信息来解释。

在本例中,有两个访问器对象。

第一个访问器描述几何数据的索引。它指的是bufferView索引为0,它是缓冲器包含索引的原始数据。此外,它还指定count类型元素和它们的componentType. 在本例中,有3个标量元素,它们的组件类型由一个表示无符号短类型

第二个访问器描述顶点位置。它包含对缓冲区数据相关部分的引用,通过bufferView索引为1,并且计数 ,type,和组件类型属性表示三维向量有三个元素,每个元素都有float组件

"accessors" : [
    {
      "bufferView" : 0,
      "byteOffset" : 0,
      "componentType" : 5123,
      "count" : 3,
      "type" : "SCALAR",
      "max" : [ 2 ],
      "min" : [ 0 ]
    },
    {
      "bufferView" : 1,
      "byteOffset" : 0,
      "componentType" : 5126,
      "count" : 3,
      "type" : "VEC3",
      "max" : [ 1.0, 1.0, 0.0 ],
      "min" : [ 0.0, 0.0, 0.0 ]
    }
  ],

如上所述mesh.primitive现在可以引用这些访问器,使用它们的索引:

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

什么时候mesh.primitive渲染器可以解析底层的缓冲区视图和缓冲区,并将缓冲区的所需部分连同有关数据类型和布局的信息一起发送给渲染器。有关呈现器如何获取和处理访问器数据的更详细描述,请参见缓冲区、缓冲区视图和访问器节和材料与工艺

这个asset描述

在gltf1.0中,这个属性仍然是可选的,但是在随后的glTF版本中,JSON文件必须包含asset包含版本数字。这里的示例说明资产符合glTF版本2.0:

 "asset" : {
    "version" : "2.0"
  }

这个asset属性可能包含中描述的其他元数据asset规范 .

results matching ""

    No results matching ""