Я пытаюсь создать простой куб в GLTF. Я использую скрипт Python для записи индекса и буфера вершин в двоичные данные. Вот мой код;
import base64
import struct
indices = [
0, 1, 2, 0, 2, 3, # Front
4, 5, 6, 4, 6, 7, # Right
8, 9, 10, 8, 10, 11, # Back
12, 13, 14, 12, 14, 15, # Left
16, 17, 18, 16, 18, 19, # Upper
20, 21, 22, 20, 22, 23 # Bottom
]
faces = [
[ # Front
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0
],
[ # Right
1.0, 1.0, 1.0,
1.0, 1.0, -1.0,
1.0, -1.0, -1.0,
1.0, -1.0, 1.0
],
[ # Back
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0
],
[ # Left
-1.0, -1.0, -1.0,
-1.0, -1.0, 1.0,
-1.0, 1.0, 1.0,
-1.0, 1.0, -1.0
],
[ # Upper
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0,
-1.0, 1.0, -1.0,
1.0, 1.0, -1.0
],
[ # Bottom
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
1.0, -1.0, 1.0,
-1.0, -1.0, 1.0
]
]
length = 2 * len(indices) + 4 * len(faces) * len(faces[0])
buffer = bytearray(length)
offset = 0
# Write index array.
for index in indices:
struct.pack_into('H', buffer, offset, index)
offset = offset + 1
# Write vertex array.
for face in faces:
for vertex in face:
struct.pack_into('f', buffer, offset, vertex)
offset = offset + 1
# Test
index_format = 'H' * 36
vertex_format = 'f' * 72
data_format = index_format + vertex_format
print(data_format)
print(struct.unpack(data_format, buffer))
# Write to base64.
b64 = base64.b64encode(buffer)
print(b64)
Проблема в том, что когда я распаковываю данные, они дают странные значения, которые приходят из ниоткуда:
(256, 2, 770, 1284, 1030, 1798, 2312, 2058, 2826, 3340, 3086, 3854, 4368, 4114, 4882, 5396, 5142, 5910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.831554006032442e-39, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
Понятия не имею, что я делаю не так. Если я упаковываю данные в тот же формат, который я использую для распаковки, почему эти значения могут отличаться?