在ARKit世界中,如何在检测到的水平面上绘制用户触摸的填充多边形连接点。
我继续通过将击中点保留在数组上来实现此目的...
let position = SCNVector3.positionFrom(matrix: result.worldTransform)
let sphere = SphereNode(position: position)
nodes.append(position)
...然后尝试绘制贝塞尔曲线路径
let bezierPath = UIBezierPath()
bezierPath.lineWidth = 0.1
for index in 0..<nodes.count {
let node = nodes[index] as SphereNode
if (index == 0) {
let point = CGPoint(x: CGFloat(node.position.x), y: CGFloat(node.position.z))
bezeierPath.move(to: point)
} else {
let point = CGPoint(x: CGFloat(node.position.x), y: CGFloat(node.position.z))
bezeierPath.addLine(to: point)
}
}
bezeierPath.close()
bezeierPath.fill()
bezeierPath.stroke()
let shape = SCNShape(path: bezeierPath, extrusionDepth: 0.03)
shape.firstMaterial?.diffuse.contents = UIColor.red
let node = SCNNode.init(geometry: shape)
sceneView.scene.rootNode.addChildNode(node)
但这不会在正确的位置绘制多边形。它将它垂直拉到相机后面。
答案 0 :(得分:0)
诸如SCNPlane
,SCNText
和SCNShape
之类的2D几何形状本质上是垂直的,因为它们在xy平面上工作。在您的示例中,您将z 3D坐标用作y 2X坐标。
尝试将node.eulerAngles.x
设置为-.pi / 2
(如果没有-
,请尝试将其设置为无效),并且您的节点将是水平的,而不是垂直的。