Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static func CreateMesh (size: CGFloat, resolution: CGFloat) -> SCNNode? {
- let axisCount = Int(floor(size / resolution))
- let bottomLeft = CGVector(
- dx: CGFloat(-(axisCount / 2)) * resolution,
- dy: CGFloat(-(axisCount / 2)) * resolution
- )
- var verts = Array(
- repeating: Array(
- repeating: (i: Int(0), pos: SCNVector3.init(x: 0, y: 0, z: 0)),
- count: axisCount),
- count: axisCount
- )
- var vertsStream = [SCNVector3]()
- var i : Int = 0
- for x in 0...axisCount-1 {
- for y in 0...axisCount-1 {
- verts[x][y] = (
- i,
- SCNVector3(
- x: Float(bottomLeft.dx + CGFloat(x) * resolution),
- y: Float.random(in: 0..<0.1),
- z: Float(bottomLeft.dy + CGFloat(y) * resolution)
- )
- )
- vertsStream.append(verts[x][y].pos)
- i += 1
- }
- }
- var tris = [(a: Int, b: Int, c: Int)]()
- var trisStream = [UInt16]()
- for x in 0...axisCount - 2 {
- for y in 0...axisCount - 2 {
- // Quad
- tris.append((
- a: verts[x][y].i,
- b: verts[x][y+1].i,
- c: verts[x+1][y+1].i
- ))
- tris.append((
- a: verts[x+1][y+1].i,
- b: verts[x+1][y].i,
- c: verts[x][y].i
- ))
- }
- }
- for t in tris {
- trisStream.append(UInt16(t.a))
- trisStream.append(UInt16(t.b))
- trisStream.append(UInt16(t.c))
- }
- // Create scene element
- let geometrySource = SCNGeometrySource(vertices: vertsStream)
- let geometryElement = SCNGeometryElement(indices: trisStream, primitiveType: .triangles)
- let geometryFinal = SCNGeometry(sources: [geometrySource], elements: [geometryElement])
- let node = SCNNode(geometry: geometryFinal)
- ////////////////////////
- // FIX MATERIAL
- ////////////////////////
- let mat = SCNMaterial()
- mat.diffuse.intensity = 1
- mat.lightingModel = .blinn
- mat.blendMode = .replace
- node.geometry?.materials = [mat]
- return node
- }
Add Comment
Please, Sign In to add comment