Как правильно интерпретировать данные из файла gltf?

Данные:

pos Accessor { buffer_view: "bufferView_30", byte_offset: 0, byte_stride: 12, component_type: F32, count: 24, kind: Vec3, max: Some([0.5, 0.5, 0.5]), min: Some([-0.5, -0.5, -0.5]), name: None }
pos BufferView { buffer: "BoxTextured", byte_offset: 72, byte_length: 768, target: Some(ArrayBuffer), name: None }
pos Buffer { uri: "BoxTextured.bin", byte_length: 840, kind: Some("arraybuffer"), name: None }

.

normal Accessor { buffer_view: "bufferView_30", byte_offset: 288, byte_stride: 12, component_type: F32, count: 24, kind: Vec3, max: Some([1, 1, 1]), min: Some([-1, -1, -1]), name: None }
normal BufferView { buffer: "BoxTextured", byte_offset: 72, byte_length: 768, target: Some(ArrayBuffer), name: None }
normal Buffer { uri: "BoxTextured.bin", byte_length: 840, kind: Some("arraybuffer"), name: None }

.

uv Accessor { buffer_view: "bufferView_30", byte_offset: 576, byte_stride: 8, component_type: F32, count: 24, kind: Vec2, max: Some([6, 1]), min: Some([0, 0]), name: None }
uv BufferView { buffer: "BoxTextured", byte_offset: 72, byte_length: 768, target: Some(ArrayBuffer), name: None }
uv Buffer { uri: "BoxTextured.bin", byte_length: 840, kind: Some("arraybuffer"), name: None }

.

ind Accessor { buffer_view: "bufferView_29", byte_offset: 0, byte_stride: 0, component_type: U16, count: 36, kind: Scalar, max: None, min: None, name: None }
ind BufferView { buffer: "BoxTextured", byte_offset: 0, byte_length: 72, target: Some(ElementArrayBuffer), name: None }
ind Buffer { uri: "BoxTextured.bin", byte_length: 840, kind: Some("arraybuffer"), name: None }

.

indices [0, 1, 2, 3, 2, 1, 4, 5, 6, 7, 6, 5, 8, 9, 10, 11, 10, 9, 12, 13, 14, 15, 14, 13, 16, 17, 18, 19, 18, 17, 20, 21, 22, 23, 22, 21]

Я пытаюсь загрузить следующую модель .

Position и Normal имеют счетчик 24. Они имеют формат Vec3, поэтому он содержит 8 Vec3. Это кажется правильным для куба. Число индексов 36, есть два треугольника на грань и 6 граней имеют 2 * 3 * 6 = 36. Таким образом, индексы также кажутся правильными.

Но почему координаты текстуры имеют счетчик 24? UV имеют формат Vec2, что означает, что существует 12 Vec2. Разве УФ не должно иметь счет 16?

Также индексы имеют диапазон 0 to 23. Для меня это тоже не имеет особого смысла, разве это не должно происходить только с 0 to 7?


person Maik Klein    schedule 07.05.2017    source источник
comment
Для будущих читателей, заинтересованных в том, как интерпретировать данные glTF в целом, я хотел бы обратиться к спецификации glTF < / а>.   -  person Don McCurdy    schedule 08.05.2017


Ответы (1)


Ошибка заключалась в том, что я предположил, что параметр count указывает количество отдельных компонентов вместо полного типа компонента.

Например, у блока есть 24 позиционные вершины, а не только 8.

person Maik Klein    schedule 07.05.2017