简体   繁体   中英

How to generating a concave or convex polygon plane in SceneKit from SCNVector3

I'm trying to create a custom SCNGeometry in the form of a plane with custom shape, which could be placed in an ARKit session. I'm using the option SCNGeometryPrimitiveTypePolygon in the following method which seems to work fine:

extension SCNGeometry {

    class func polygonfrom(vectices: [SCNVector3]) -> SCNGeometry {
        let indices: [Int32] = getIndices(count: vectices.count)
        let indexData = Data(bytes: indices, count: indices.count * MemoryLayout<Int32>.size)
        let source = SCNGeometrySource(vertices: vectices)
        let element = SCNGeometryElement(data: indexData, primitiveType: .polygon, primitiveCount: 1, bytesPerIndex: MemoryLayout<Int32>.size)
        return SCNGeometry(sources: [source], elements: [element])
    }

    class private func getIndices(count: Int) -> [Int32] {
        var indices: [Int32] = []
        indices.append(Int32(count))
        for i in 0..<count{
            indices.append(Int32(i))
        }
        return indices
    }
}

Unfortunately, It doesn't fit for a concave polygon:

results

The SCNShape class creates a suited triangulation on your behalf.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM