我想绘制SceneKit贝塞尔曲线,认为这会工作:SceneKit绘制曲线
func drawCurvedLine() {
let scene = SCNScene()
let scnView = self.view as! SCNView
scnView.scene = scene
scnView.allowsCameraControl = true
let path = UIBezierPath()
path.moveToPoint(CGPoint(x: -20, y: -20))
path.addCurveToPoint(CGPoint(x: 20, y: 20),
controlPoint1: CGPoint(x: 5, y: 5),
controlPoint2: CGPoint(x: 15, y: 15))
path.closePath()
path.flatness = 0.3
var scnShape:SCNShape = SCNShape(path: path, extrusionDepth: 2)
scnShape.firstMaterial?.diffuse.contents = UIColor.purpleColor()
let shapeNode = SCNNode(geometry: scnShape)
scene.rootNode.addChildNode(shapeNode)
}
但是我的结果是这样的截图:
有谁知道为什么curveTo控制点被忽略或如何切换它们?或者在SceneKit中绘制曲线的任何其他方法?
编辑更新路径坐标:
path.moveToPoint(CGPoint(X:-20,Y:-20)) path.addCurveToPoint(CGPoint(X:20,Y:20) , controlPoint1:CGPoint(X:10,Y:0), controlPoint2:CGPoint(X:10,Y:0))
我可以得到这样的:
但是我想我正在寻找不填充形状。理想情况下,我想在这里实现一条弯曲的管状线。 (想象一下电力电缆或其他一些......)。我想我会喜欢有相当于SCNLine或SCNTube“在贝塞尔路径上渲染”
好吧,为了使它更像线条形状,请尝试沿着任意轴平移所有点。 (CGPoint(x:20,y:-20)) path.addCurveToPoint(CGPoint(x:20,y:20),controlPoint1:CGPoint(x:10,y:0),控制点2:CGPoint(x:10,y:0))'(原始点) Then: 'path.moveToPoint(CGPoint(x:20,y:-17))' 'path.addCurveToPoint(CGPoint(x: (x:10,y:0),controlPoint2:CGPoint(x:10,y:3))' (对所有y值加3)。 研究倒角SCNShape并使用SCNLightTypeOmni或SCNLightTypeDirectional类型的SCNLight。 – jperl