c++ - 在glTF文件中跨步的属性?

标签 c++ json parsing rendering gltf

Khronos文档将步幅定义为:

When a buffer view is used for vertex attribute data, it may have a byteStride property. This property defines the stride in bytes between each vertex.


我有些困惑,因为我已经尝试过的许多示例(其中3个)的步幅为0,所以到目前为止我只是忽略了该属性。这些例子很好。
我从类型中推断出“大步向前”。例如如果类型是vec3,并且组件类型是float,则每12个字节作为一个元素加载一次。我对阅读规范并不完全确定,
当跨步为非0时,这是否意味着数据可以交织?
当跨步为非0时,数据是否可以为非连续数据(例如填充字节)?
换句话说,您是否会遇到缓冲区未交错但sizeof(type_component) * element_count的总大小不等于要读取的内存的总子数的因数的情况?

最佳答案

是的,访问器(在glTF中)类似于OpenGL / WebGL中的顶点属性,并且可以交织。跨步位于bufferView上,以强制共享该bufferView的访问器都具有相同的跨步。零值表示“紧密包装”。
请注意,您可能会交错插入不同大小的组件,例如vec3(POSITION)与vec2(TEXCOORD_0),因此跨度可能是不同大小的总和。
这是来自glTF教程Data Interleaving section的图表。这里有点小,但是您可以单击以查看大图。在此示例中,有两个访问器,一个用于POSITION,一个用于NORMAL,共享一个BufferView。
Data Interleaving

关于c++ - 在glTF文件中跨步的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64546908/

相关文章:

c++ - shobjidl.h 中的第二个 C 链接

javascript - 在 JSON 文件中获取第一级数据时面临问题

java - 分离数据并存储在ArrayList中?

c++ - 从一个文件中找到一个词并替换到另一个文件中

c++ - 从 C++ 调用 Win32 DLL

c++ - 如何在 MacOS 上使用 C++98 进行编译?

json - Play Framework 2.4 Writes[-A] vs OWrites[-A],Format[A] vs OFormat[A]。目的?

php - jquery json post返回整个页面html

python - 使用 python 3.5 用希伯来语和英语解析 json 文件

python - 如何在Python中将二进制元素的数据解析为列表列表?