Как интерпретировать SCNGeometryElement?
У меня есть файл OBJ, который я загрузил через Model IO. Имеет 4 подсетки,
Вот что я получаю от Model IO
(lldb) po object
<<MDLMesh: 0x7ffeeb4334a8>, Name: MDL_OBJ_material0000, VertexCount: 165291, VertexBufferCount: 1>
(lldb) po object.submeshes
▿ Optional<NSMutableArray>
▿ some : 4 elements
- 0 : <MDLSubmesh: 0x600000b08eb0>
- 1 : <MDLSubmesh: 0x600000b0d680>
- 2 : <MDLSubmesh: 0x600000b31ae0>
- 3 : <MDLSubmesh: 0x600000b31ea0>
После того, как я загружаю MDLMesh в SCNNode и проверяю геометрический элемент, вот что я получаю
(lldb) po elements
▿ 4 elements
- 0 : <SCNGeometryElement: 0x600000322a00 | 121453 x triangle, 1 channels, int indices>
- 1 : <SCNGeometryElement: 0x600000322d80 | 100244 x triangle, 1 channels, int indices>
- 2 : <SCNGeometryElement: 0x600000322e60 | 26908 x triangle, 1 channels, int indices>
- 3 : <SCNGeometryElement: 0x600000322f40 | 57 x triangle, 1 channels, int indices>
Сумма треугольников,
121453 + 100244 + 26908 + 57 = 248662
, который также является количеством строк, начинающихся с 'f' в файле OBJ.
Первые несколько строк лиц выглядят так:f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3
вот данные из файла:
f 57504/1/57504 57792/2/57792 56947/3/56947
f 57508/4/57508 57792/2/57792 57504/1/57504
f 57792/2/57792 57264/5/57264 56947/3/56947
f 58032/6/58032 57504/1/57504 56947/3/56947
И когда я прочитал
geometry.elements[0].data
и распечатайте первые несколько элементов, я получаю следующее:0, 1, 2, 3, 1, 0, 1, 4, 2, 5, 0, 2, 3, 0, 6, 4, 7, 2, 1, 8
Если внимательно присмотреться, то можно увидеть, что это соответствует среднему числу (индексы на 1 меньше числа из файла OBJ),
vt
который будет индексом текстуры.
Чтобы было понятно, модель загружается правильно. Я пытаюсь удалить несколько лиц и переиндексировать файл.
- Почему индексы соответствуют
vt
и нетv
? - Где остальные данные (нормальные индексы и нормальные индексы)? Модель IO отказалась от этого?