Swift 4-如何将自定义SCNGeometry创建为多边形

时间:2019-02-10 11:54:07

标签: ios swift scenekit arkit

我一直在尝试使用以下代码从一组SCNVector3位置创建一个自定义SCNGeometry多边形:

private func polygonGeometry (vertices: [SCNVector3]) -> SCNGeometry {
        var indices: [Int32] = [Int32(vertices.count)]
        indices.append(contentsOf: generateIndices(max: vertices.count))
        let vertexSource = SCNGeometrySource(vertices: vertices )
        let indexData = Data(bytes: indices,
                             count: indices.count * MemoryLayout<Int32>.size)
        let element = SCNGeometryElement(data: indexData,
                                         primitiveType: .polygon,
                                         primitiveCount: 1,
                                         bytesPerIndex: MemoryLayout<Int32>.size)
        return SCNGeometry(sources: [vertexSource], elements: [element])
    }

使用此helperMethod可以生成正确数量的索引:

private func generateIndices(max maxIndexValue: Int) -> [Int32]{
        var counter: Int = 0
        var output: [Int32] = []
        while counter < maxIndexValue {
            output.append(Int32(counter))
            counter += 1
        }
        return output
    }

该代码对于某些多边形可以正常工作。但是,有时在尝试创建自定义几何图形时在控制台中出现以下错误,并且程序崩溃。

[MTLDebugDevice validateNewBufferArgs:options:]:467: failed assertion Cannot create buffer of zero length.

有人知道为什么会这样吗?代码中是否有任何缺陷?

[EDIT]:我相信当第一个位置和最后一个位置具有相同的x,y,z值时会发生问题。只需从位置数组中删除最后一个位置,多边形就会按预期呈现!

0 个答案:

没有答案