Извлечение информации о лицах из SCNGeometry в SceneKit
Я хочу извлекать информацию о гранях из геометрии SCNNode точно так же, как мы можем извлекать информацию о вершинах из геометрических источников. Есть идеи, как этого можно достичь?
1 ответ
Если у вас есть объект SCNGeometry (который можно получить из SCNNode с
node.geometry
) тогда вы можете посмотреть на
elements
свойство, которое будет содержать информацию о лице в виде массива объектов SCNGeometryElement.
например, если вам нужен только первый элемент
let element = geometry.elements[0]
let faces = element.data.withUnsafeBytes {(ptr: UnsafeRawBufferPointer) -> [Int32] in
guard let boundPtr = ptr.baseAddress?.assumingMemoryBound(to: Int32.self) else {return []}
let buffer = UnsafeBufferPointer(start: boundPtr, count: element.data.count / 4)
return Array<Int32>(buffer)
}
print(faces)
В зависимости от
element.primitiveType
вам нужно будет интерпретировать индексы по-разному. См. Документацию для SCNGeometryPrimitiveType.