我有以下代码:
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)
}
我想添加一条Bezier路径,将每个球体连接到下一个球体,从而在螺旋线上创建螺旋线。出于某种原因,当我添加此代码时,甚至不会出现形状。但是当我使用更大的x和y值时,我看到路径很好,但它无法定位到球体的大小。当我试图让它变小时,我不明白为什么它会消失。
答案 0 :(得分:0)
你的SCNShape并没有被挤压。按Apple doc,
挤出深度为零会形成扁平的单面形状。
如果X / Y值较大,则您的扁平形状会变得可见。但是,您无法使用SCNShape构建3D螺旋:挤出的起始平面和结束平面是平行的。
您必须使用自定义几何体,或使用一系列细长的SCNBox节点逼近您的螺旋线。而且我打赌那里有人知道如何用着色器做到这一点。