Как интерпретировать 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 который будет индексом текстуры.

Чтобы было понятно, модель загружается правильно. Я пытаюсь удалить несколько лиц и переиндексировать файл.

  1. Почему индексы соответствуют vt и нет v?
  2. Где остальные данные (нормальные индексы и нормальные индексы)? Модель IO отказалась от этого?

0 ответов

Другие вопросы по тегам