我该如何绘制一个填充多边形,连接用户在ARKit world中检测到的水平面上接触的点。
我继续这样做,在一个数组上保持生命点。。。
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)
但这并没有在正确的地方画出多边形。它把它垂直地画在相机后面。
最佳答案
像SCNPlane
、SCNText
和SCNShape
这样的二维几何图形本质上是垂直的,因为它们在xy平面上工作。在您的示例中,您使用的是z 3D坐标作为y 2X坐标。
尝试将node.eulerAngles.x
设置为-.pi / 2
(如果不起作用,请尝试不使用-
),节点将是水平的而不是垂直的。
关于ios - 在ARKit水平面上绘制填充的多边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51969438/