【问题标题】:Properties of the stride in a glTF file?glTF文件中步幅的属性?
【发布时间】:2020-10-27 00:49:30
【问题描述】:

Khronos 文档将步幅定义为:

当缓冲区视图用于顶点属性数据时,它可能具有 byteStride 属性。该属性定义了每个顶点之间的跨度(以字节为单位)。

我有些困惑,因为我已经尝试过的许多示例(其中 3 个)的步幅为 0,所以直到现在我只是忽略了该属性。这些示例渲染得很好。

我是从类型推断“步幅”。例如如果类型是 vec3 并且组件类型是浮点数,我将每 12 个字节加载为一个元素。阅读规范时我不完全确定的一些事情是,

当stride不为0时,这是否意味着数据可以交错? 当步幅为非 0 时,数据可以是非连续的(例如填充字节)吗? 换句话说,您是否会遇到缓冲区未交错但sizeof(type_component) * element_count 的总大小不是要读取的总内存小节的除数的情况?

【问题讨论】:

    标签: c++ json parsing rendering gltf


    【解决方案1】:

    是的,访问器(在 glTF 中)类似于 OpenGL/WebGL 中的顶点属性,并且允许交错。步幅在 bufferView 上,以强制共享该 bufferView 的访问器都具有相同的步幅。零值表示“紧密包装”。

    请注意,您可以将不同大小的组件交错,例如 vec3 (POSITION) 和 vec2 (TEXCOORD_0),因此步幅可能是不同大小的总和。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多