【问题标题】:Why are BufferViews and Accessors separate in glTF?为什么 BufferViews 和 Accessors 在 glTF 中是分开的?
【发布时间】:2019-07-04 02:24:59
【问题描述】:

GLTF 格式指定网格通过访问器引用其顶点和索引数据,而访问器又引用 BufferViews。它们都有一个偏移量和一个长度。

主要区别似乎在于 BufferView 与格式无关,它们只是引用一堆字节,而访问器正在添加类型信息。

我不明白的是:

  1. 为什么它们都需要偏移量和长度?哪个用例是访问器中的偏移量不为零并且访问器的计数与视图的长度不对应?
  2. 为什么类型数据不直接包含在缓冲区视图中?在什么用例中使用不同格式解释相同的数据有意义?

【问题讨论】:

    标签: graphics 3d gltf


    【解决方案1】:

    该格式旨在支持交错的顶点属性,最初来自 WebGL(在 glTF 1.0 中),但现在更普遍地跨图形 API(在 glTF 2.0 中)。

    例如,POSITION 数据可能是FLOATvec3,但TEXCOORD_0 数据可能是FLOATvec2,甚至可能有不同类型的自定义属性,全部交错在单个 GPU 缓冲区内。

    所以BufferView 定义了一个给定的字节跨度,进入该视图的各个访问器可能具有不同的类型和数量,但都将共享相同的字节跨度。

    当然,您不需要交错,但格式旨在允许它,并在发生时强制执行字节跨度共享。

    这是来自 glTF 教程的Data Interleaving section 的图表。这里有点小,但您可以点击查看大图。在此示例中,有两个访问器,一个用于 POSITION,一个用于 NORMAL,共享一个 BufferView。

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多