我想用SceneKit画一条贝塞尔曲线,认为这样做会起作用:
然而,我的结果就像这个屏幕截图:
有人知道为什么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“基于贝塞尔路径渲染”。
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)
}
然而,我的结果就像这个屏幕截图:
![SceneKit render](https://istack.dev59.com/H3wXX.webp)
编辑更新路径坐标为: 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))
我可以得到这个结果:
![curved](https://istack.dev59.com/v5L7W.webp)
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))
(原始点) 然后:path.moveToPoint(CGPoint(x: 20, y: -17))
path.addCurveToPoint(CGPoint(x: -20, y: -17), controlPoint1: CGPoint(x: 10, y: 0), controlPoint2: CGPoint(x: 10, y: 3))
(将所有y值加3)。研究下如何倒角SCNShape
并使用类型为SCNLightTypeOmni
或SCNLightTypeDirectional
的SCNLight
。 - jperl