SceneKit per vertex color

前端 未结 1 1502
悲&欢浪女
悲&欢浪女 2021-01-12 07:58

I\'ve been playing with SceneKit, but I can\'t figure how to create a per vertex color geometry.

So to be more precise, I would like to do this : http://openglbook.c

相关标签:
1条回答
  • 2021-01-12 08:49

    Pour info :

        sceneView = SCNView(frame: sceneContainer.bounds)
        sceneView.scene = SCNScene()
        sceneView.allowsCameraControl = true
        sceneView.autoenablesDefaultLighting = true
        sceneView.showsStatistics = true
        sceneView.backgroundColor = UIColor.darkGrayColor()
    
        self.sceneContainer.addSubview(sceneView)
    
        // Vertex
        let vertices: [SCNVector3] = [SCNVector3(0, 0, 0),
            SCNVector3(1, 0, 0),
            SCNVector3(0.5, 1, 0)]
    
        let vertexData = NSData(bytes: vertices, length: vertices.count * sizeof(SCNVector3))
        let vertexSource = SCNGeometrySource(data: vertexData, semantic: SCNGeometrySourceSemanticVertex, vectorCount: vertices.count, floatComponents: true, componentsPerVector: 3, bytesPerComponent: sizeof(Float), dataOffset: 0, dataStride: sizeof(SCNVector3))
    
        // Faces
        let indices: [Int32] = [0,1,2]
    
        let indexData = NSData(bytes: indices, length: sizeof(Int32) * indices.count)
        let indexElement = SCNGeometryElement(data: indexData, primitiveType: SCNGeometryPrimitiveType.Triangles, primitiveCount: indices.count / 3, bytesPerIndex: sizeof(CInt))
    
        // Normals
        let normals: [SCNVector3] = [SCNVector3(0, 0, 1),
            SCNVector3(0, 0, 1),
            SCNVector3(0, 0, 1)]
    
        let normalData = NSData(bytes: normals, length: sizeof(SCNVector3) * normals.count)
        let normalSource = SCNGeometrySource(data: normalData, semantic: SCNGeometrySourceSemanticNormal, vectorCount: normals.count, floatComponents: true, componentsPerVector: 3, bytesPerComponent: sizeof(Float), dataOffset: 0, dataStride: sizeof(SCNVector3))
    
        // Colors
        let colors: [SCNVector3] = [SCNVector3(1, 0, 0),
            SCNVector3(0, 1, 0),
            SCNVector3(0, 0, 1)]
    
        let colorData = NSData(bytes: colors, length: sizeof(SCNVector3) * colors.count)
        let colorSource = SCNGeometrySource(data: colorData, semantic: SCNGeometrySourceSemanticColor, vectorCount: colors.count, floatComponents: true, componentsPerVector: 3, bytesPerComponent: sizeof(Float), dataOffset: 0, dataStride: sizeof(SCNVector3))
    
        // Geometry
        let voxelGeometry = SCNGeometry(sources: [vertexSource, normalSource, colorSource], elements: [indexElement])
        let voxelMaterial = SCNMaterial()
        voxelMaterial.diffuse.contents = UIColor.whiteColor()
        voxelGeometry.materials = [voxelMaterial]
    
        voxelNode = SCNNode(geometry: voxelGeometry)
        voxelNode.position = SCNVector3(0, 0, 0)
    
        sceneView.scene?.rootNode.addChildNode(voxelNode)
    
    0 讨论(0)
提交回复
热议问题