我正在尝试创建一个用于在 abARKit
场景中显示的弯曲箭头,但是,箭头杆的曲率只是在两侧呈现为一条直线。
func createTurnArrow(_ direction: Direction) -> SCNShape {
let path = UIBezierPath()
path.move(to: CGPoint(x: 0.2, y: 0)) // A
path.addLine(to: CGPoint(x: 0, y: 0.2)) // B
path.addLine(to: CGPoint(x: 0, y: 0.1)) // C
path.addQuadCurve(to: CGPoint(x: -0.3, y: -0.3), controlPoint: CGPoint(x: -0.3, y: 0.1)) // Curve 1
path.addLine(to: CGPoint(x: -0.1, y: -0.3)) // D
path.addQuadCurve(to: CGPoint(x: 0, y: -0.1), controlPoint: CGPoint(x: -0.1, y: -0.1)) // Curve 2
path.addLine(to: CGPoint(x: 0, y: -0.2)) // E
path.close()
return direction == .left ?
SCNShape(path: path.reversing(), extrusionDepth: self.defaultDepth) :
SCNShape(path: path, extrusionDepth: self.defaultDepth)
}
我的直觉告诉我用这个函数创建一个节点:
SCNNode(geometry: createTurnArrow(.right))
应该产生这样的形状:
而是在没有任何曲线的情况下将其渲染到箭头的尾部:
我已经尝试了一堆其他数学来获得二次曲线的当前控制点,但没有什么可担心的。有任何想法吗?
编辑:
带有绘制点的示意图在哪里,以及我对如何用曲线渲染的假设。