SceneKit: экспортная сетка, импортированная из STL, приводит к мусору
Я использую эту суть для импорта двоичной трехмерной сетки STL в SCNNode, которая отлично работает (я могу просматривать сетку в SCNView, и она выглядит хорошо).
Однако, если я попытаюсь экспортировать (неизмененную) сетку, используя либо MDLAsset.export(to: url)
или SCNScene.write(to: url)
в файл STL или OBJ результирующая сетка будет повреждена.
Если я загружу пример ship.scn
сцену, а затем экспортировать в STL, все выглядит хорошо. Это заставляет меня думать, что должно быть что-то не так в том, как вышеупомянутая суть создает SCNNode, но я не могу понять, что это такое.
1 ответ
Я сам разобрался. Конструктор SCNGeometryElement позволяет передавать данные индексов nil. Хотя это нормально для отображения сетки в сцене, по крайней мере, функция экспорта и, возможно, другие части фреймворка полагаются на заполняемые данные, что, вопреки ожидаемому, не выполняется конструктором автоматически. Так что вам нужно сделать это самому. К счастью, есть еще один конструктор, который упрощает эту задачу:
let indices = [UInt32](0..<UInt32(trianglesCounted * 3))
let countedTriangles = SCNGeometryElement(indices: indices, primitiveType: .triangles)