diff --git a/Waveform/GameViewController.swift b/Waveform/GameViewController.swift index 97e0624..d381f21 100644 --- a/Waveform/GameViewController.swift +++ b/Waveform/GameViewController.swift @@ -9,21 +9,35 @@ import SceneKit import QuartzCore -class GameViewController: NSViewController { - +class GameViewController: NSViewController, SCNSceneRendererDelegate { + static let numberOfBallsPerSide = 41 + + private var balls = [SCNNode]() + override func viewDidLoad() { super.viewDidLoad() - + + guard let sceneView = view as? SCNView else { + fatalError("My view isn't a SCNView!") + } + sceneView.delegate = self + sceneView.rendersContinuously = true + sceneView.preferredFramesPerSecond = 30 + // create a new scene - let scene = SCNScene(named: "art.scnassets/ship.scn")! + let scene = SCNScene(named: "art.scnassets/blank.scn")! // create and add a camera to the scene let cameraNode = SCNNode() - cameraNode.camera = SCNCamera() + let camera = SCNCamera() + cameraNode.camera = camera scene.rootNode.addChildNode(cameraNode) // place the camera - cameraNode.position = SCNVector3(x: 0, y: 0, z: 15) + cameraNode.position = SCNVector3(x: CGFloat(GameViewController.numberOfBallsPerSide / 7), + y: 1.5, + z: CGFloat(GameViewController.numberOfBallsPerSide / 3)) + cameraNode.look(at: SCNVector3()) // create and add a light to the scene let lightNode = SCNNode() @@ -38,33 +52,44 @@ class GameViewController: NSViewController { ambientLightNode.light!.type = .ambient ambientLightNode.light!.color = NSColor.darkGray scene.rootNode.addChildNode(ambientLightNode) - - // retrieve the ship node - let ship = scene.rootNode.childNode(withName: "ship", recursively: true)! - - // animate the 3d object - ship.runAction(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1))) - - // retrieve the SCNView - let scnView = self.view as! SCNView + + let sphereContainer = SCNNode() + scene.rootNode.addChildNode(sphereContainer) + + if let sphere = scene.rootNode.childNode(withName: "sphere", recursively: false) { + // Remove it. We're going to copy it all over the place. + sphere.removeFromParentNode() + for i in 0.. Double { + return 0.05 * Double(x) + 0.03 * Double(y) + } + + // MARK: - SCNRendererDelegate + + static let numberOfSteps = 100 + var step = 0 + var maxY = 0.0 + var minY = 0.0 + + func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { + for z in 0.. Double { + return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; + } } diff --git a/Waveform/art.scnassets/blank.scn b/Waveform/art.scnassets/blank.scn new file mode 100644 index 0000000..06268f8 Binary files /dev/null and b/Waveform/art.scnassets/blank.scn differ diff --git a/Waveform/art.scnassets/ship.scn b/Waveform/art.scnassets/ship.scn deleted file mode 100644 index 8d166d0..0000000 Binary files a/Waveform/art.scnassets/ship.scn and /dev/null differ diff --git a/Waveform/art.scnassets/texture.png b/Waveform/art.scnassets/texture.png deleted file mode 100644 index ba39258..0000000 Binary files a/Waveform/art.scnassets/texture.png and /dev/null differ