SceneKit: экспортная сетка, импортированная из STL, приводит к мусору

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

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

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

Актуальная модель: Результат экспорта STL/OBJ:

1 ответ

Решение

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

let indices = [UInt32](0..<UInt32(trianglesCounted * 3))
let countedTriangles = SCNGeometryElement(indices: indices, primitiveType: .triangles)
Другие вопросы по тегам