Почему BufferViews и Accessors разделены в glTF? - PullRequest
0 голосов
/ 10 февраля 2019

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

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

Что я не понимаю, так это:

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

1 Ответ

0 голосов
/ 11 февраля 2019

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

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

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

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

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

Data Interleaving

...