我该如何绘制一个填充多边形,连接用户在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)

但这并没有在正确的地方画出多边形。它把它垂直地画在相机后面。

最佳答案

SCNPlaneSCNTextSCNShape这样的二维几何图形本质上是垂直的,因为它们在xy平面上工作。在您的示例中,您使用的是z 3D坐标作为y 2X坐标。
尝试将node.eulerAngles.x设置为-.pi / 2(如果不起作用,请尝试不使用-),节点将是水平的而不是垂直的。

关于ios - 在ARKit水平面上绘制填充的多边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51969438/

10-08 22:01