Guest User

Untitled

a guest
Jan 22nd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. public static func CreateMesh (size: CGFloat, resolution: CGFloat) -> SCNNode? {
  2. let axisCount = Int(floor(size / resolution))
  3. let bottomLeft = CGVector(
  4. dx: CGFloat(-(axisCount / 2)) * resolution,
  5. dy: CGFloat(-(axisCount / 2)) * resolution
  6. )
  7.  
  8. var verts = Array(
  9. repeating: Array(
  10. repeating: (i: Int(0), pos: SCNVector3.init(x: 0, y: 0, z: 0)),
  11. count: axisCount),
  12. count: axisCount
  13. )
  14. var vertsStream = [SCNVector3]()
  15.  
  16. var i : Int = 0
  17. for x in 0...axisCount-1 {
  18. for y in 0...axisCount-1 {
  19. verts[x][y] = (
  20. i,
  21. SCNVector3(
  22. x: Float(bottomLeft.dx + CGFloat(x) * resolution),
  23. y: Float.random(in: 0..<0.1),
  24. z: Float(bottomLeft.dy + CGFloat(y) * resolution)
  25. )
  26. )
  27. vertsStream.append(verts[x][y].pos)
  28.  
  29. i += 1
  30. }
  31. }
  32.  
  33. var tris = [(a: Int, b: Int, c: Int)]()
  34. var trisStream = [UInt16]()
  35. for x in 0...axisCount - 2 {
  36. for y in 0...axisCount - 2 {
  37. // Quad
  38. tris.append((
  39. a: verts[x][y].i,
  40. b: verts[x][y+1].i,
  41. c: verts[x+1][y+1].i
  42. ))
  43. tris.append((
  44. a: verts[x+1][y+1].i,
  45. b: verts[x+1][y].i,
  46. c: verts[x][y].i
  47. ))
  48. }
  49. }
  50. for t in tris {
  51. trisStream.append(UInt16(t.a))
  52. trisStream.append(UInt16(t.b))
  53. trisStream.append(UInt16(t.c))
  54. }
  55.  
  56. // Create scene element
  57. let geometrySource = SCNGeometrySource(vertices: vertsStream)
  58. let geometryElement = SCNGeometryElement(indices: trisStream, primitiveType: .triangles)
  59. let geometryFinal = SCNGeometry(sources: [geometrySource], elements: [geometryElement])
  60. let node = SCNNode(geometry: geometryFinal)
  61.  
  62. ////////////////////////
  63. // FIX MATERIAL
  64. ////////////////////////
  65. let mat = SCNMaterial()
  66. mat.diffuse.intensity = 1
  67. mat.lightingModel = .blinn
  68. mat.blendMode = .replace
  69.  
  70. node.geometry?.materials = [mat]
  71.  
  72. return node
  73. }
Add Comment
Please, Sign In to add comment