SceneKit: экспорт me sh, который был импортирован из STL, приводит к мусору - PullRequest
0 голосов
/ 04 мая 2020

Я использую эту суть для импорта бинарного STL 3d me sh в SCNNode, который прекрасно работает (я могу просмотреть me sh в SCNView, и он выглядит хорошо).

Однако, если я пытаюсь экспортировать (без изменений) me sh, используя MDLAsset.export(to: url) или SCNScene.write(to: url), в файл STL или OBJ, полученный me sh будет поврежден.

Если я загружаю пример ship.scn сцены и затем экспортирую в STL, все выглядит хорошо. Это заставляет меня думать, что должно быть что-то не так в том, как вышеупомянутая сущность создает SCNNode, но я не могу понять, что это такое.

Фактическая модель: enter image description here Результат экспорта STL / OBJ: enter image description here

1 Ответ

1 голос
/ 05 мая 2020

Я понял это сам. Конструктор SCNGeometryElement позволяет передавать nil для данных индексов. Хотя это хорошо для отображения me sh в сцене, по крайней мере, функциональность экспорта и, возможно, другие части инфраструктуры полагаются на заполняемые данные - что, вопреки тому, что и следовало ожидать - не выполняется конструктором автоматически. Так что вам нужно сделать это самостоятельно. К счастью, есть еще один конструктор, который делает это проще:

let indices = [UInt32](0..<UInt32(trianglesCounted * 3))
let countedTriangles = SCNGeometryElement(indices: indices, primitiveType: .triangles)
...