Почему BufferViews и Accessors разделены в glTF?

Формат GLTF указывает, что сетки ссылаются на свои вершины и данные индекса через методы доступа, которые, в свою очередь, ссылаются на BufferViews. Оба они имеют смещение и длину.

Основное отличие состоит в том, что BufferView не зависит от формата, они просто ссылаются на кучу байтов, в то время как методы доступа добавляют информацию о типе.

Я не понимаю:

  1. Зачем им обоим нужны смещение и длина? Какой вариант использования существует, когда смещение в методе доступа не равно нулю, а счетчик доступа не соответствует длине представления?
  2. Почему данные типа не содержатся непосредственно в представлении буфера? В каком случае имеет смысл интерпретировать одни и те же данные в разных форматах?

person georch    schedule 10.02.2019    source источник


Ответы (1)


Формат разработан для поддержки атрибутов чередующихся вершин, первоначально из WebGL (в glTF 1.0), но теперь в более общем плане для графических API (в glTF 2.0).

Например, данные POSITION могут быть vec3 из FLOAT, но данные TEXCOORD_0 могут быть vec2 из FLOAT, и даже могут быть настраиваемые атрибуты разных типов, все чередующиеся в одном буфере графического процессора.

Таким образом, BufferView определяет данный байтовый шаг, и отдельные аксессоры в этом представлении могут иметь разные типы и количества, но все они будут иметь один и тот же байтовый шаг.

Вы, конечно, не обязаны чередовать, но формат разработан, чтобы разрешить это и обеспечить совместное использование байтового шага, когда это происходит.

Вот диаграмма из раздела данных a> учебника по glTF. Здесь он немного маленький, но вы можете щелкнуть, чтобы увеличить его. В этом примере есть два метода доступа, один для POSITION и один для NORMAL, которые совместно используют один BufferView.

person emackey    schedule 11.02.2019