Extracting vertices from scenekit

后端 未结 7 430
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-03 01:42

I\'m having a problem with understanding scenekit geometery.

I have the default cube from Blender, and I export as collada (DAE), and can bring it into scenekit....

相关标签:
7条回答
  • 2020-12-03 02:21

    // call this function _ = vertices(node: mySceneView.scene!.rootNode) // I have get the volume in Swift 4.2 :--- this function

    func vertices(node:SCNNode) -> [SCNVector3] {
    
        let planeSources1 = node.childNodes.first?.geometry
    
        let planeSources = planeSources1?.sources(for: SCNGeometrySource.Semantic.vertex)
        if let planeSource = planeSources?.first {
    
            let stride = planeSource.dataStride
            let offset = planeSource.dataOffset
            let componentsPerVector = planeSource.componentsPerVector
            let bytesPerVector = componentsPerVector * planeSource.bytesPerComponent
    
            let vectors = [SCNVector3](repeating: SCNVector3Zero, count: planeSource.vectorCount)
            let vertices = vectors.enumerated().map({
                (index: Int, element: SCNVector3) -> SCNVector3 in
                let vectorData = UnsafeMutablePointer<Float>.allocate(capacity: componentsPerVector)
                let nsByteRange = NSMakeRange(index * stride + offset, bytesPerVector)
                let byteRange = Range(nsByteRange)
    
                let buffer = UnsafeMutableBufferPointer(start: vectorData, count: componentsPerVector)
                planeSource.data.copyBytes(to: buffer, from: byteRange)
                return SCNVector3Make(buffer[0], buffer[1], buffer[2])
            })
            var totalVolume = Float()
            var x1 = Float(),x2 = Float(),x3 = Float(),y1 = Float(),y2 = Float(),y3 = Float(),z1 = Float(),z2 = Float(),z3 = Float()
            var i = 0
            while i < vertices.count{
    
                    x1 = vertices[i].x;
                    y1 = vertices[i].y;
                    z1 = vertices[i].z;
    
                    x2 = vertices[i + 1].x;
                    y2 = vertices[i + 1].y;
                    z2 = vertices[i + 1].z;
    
                    x3 = vertices[i + 2].x;
                    y3 = vertices[i + 2].y;
                    z3 = vertices[i + 2].z;
    
                    totalVolume +=
                        (-x3 * y2 * z1 +
                            x2 * y3 * z1 +
                            x3 * y1 * z2 -
                            x1 * y3 * z2 -
                            x2 * y1 * z3 +
                            x1 * y2 * z3);
    
                            i = i + 3
            }
            totalVolume = totalVolume / 6;
            volume = "\(totalVolume)"
            print("Volume Volume Volume Volume Volume Volume Volume :\(totalVolume)")
            lbl_valume.text = "\(clean(String(totalVolume))) cubic mm"
        }
        return[]
    }
    
    0 讨论(0)
提交回复
热议问题