2016-04-04 21 views
0

私は、次のコードを持っている:私はらせんを下って行くスパイラルを作成する、次のいずれかに各球を結ぶベジェパスを追加したいSwiftのベジェパスを使用して3D空間で2つのSCNSpheresを接続する方法は?

func createScene(){ 
    count += 1 

    let sphereGeom = SCNSphere(radius: 1.5) 
    sphereGeom.firstMaterial?.diffuse.contents = UIColor.redColor() 
    let path = UIBezierPath() 
    path.moveToPoint(CGPoint(x: 0, y: 0)) 

    let radius = 3.0 
    var radians = Double(0) 
    var yPosition = Float(5.4) 

    while count <= 20 { 

     if radians >= 2{ 
      radians -= 2 
     } 

     let sphereNode = SCNNode(geometry: sphereGeom) 
     let angle = Double(radians * M_PI) 

     let xPosition = Float(radius * cos(angle)) 
     let zPosition = Float(radius * sin(angle)) 

     sphereNode.position = SCNVector3(xPosition, yPosition, zPosition) 

     let cgX = CGFloat(xPosition) 
     let cgY = CGFloat(yPosition) 

     path.addQuadCurveToPoint(CGPoint(x: cgX, y: cgY), controlPoint: CGPoint(x: (cgX/2), y: (cgY/2))) 
     path.addLineToPoint(CGPoint(x: (cgX - (cgX * 0.01)), y: cgY)) 
     path.addQuadCurveToPoint(CGPoint(x: 1, y: 0), controlPoint: CGPoint(x: (cgX/2), y: ((cgY/2) - (cgY * 0.01)))) 

     let shape = SCNShape(path: path, extrusionDepth: 3.0) 
     shape.firstMaterial?.diffuse.contents = UIColor.blueColor() 
     let shapeNode = SCNNode(geometry: shape) 
     shapeNode.eulerAngles.y = Float(-M_PI_4) 
     self.rootNode.addChildNode(shapeNode) 

     count += 1 
     radians += 0.5556 
     yPosition -= 1.35 

     self.rootNode.addChildNode(sphereNode) 

    } 

を。何らかの理由で、このコードを追加すると、図形が表示されません。しかし、大きなx値とy値を使用すると、パスはきれいに見えますが、球のサイズに合わせた方法ではありません。私はそれを小さくしようとするとなぜ消えるのか分かりません。

答えて

0

あなたのSCNShapeは押出されません。 Apple社のドキュメントでは、

押出深度がゼロの場合、フラットな片面形状が作成されます。

X/Y値が大きいほど、フラットな形状が見えるようになります。ただし、SCNShapeを使用して3Dヘリックスを構築することはできません。押出の開始面と終了面は平行です。

カスタムジオメトリを使用するか、一連の細長いSCNBoxノードでヘリックスを近似する必要があります。そして、そこの誰かがシェーダでこれを行う方法を知っていると賭けました。

関連する問題