ARKit将3d对象位置转换为UIView坐标

时间:2018-07-12 14:32:27

标签: ios arkit

我创建了度量演示,可以放置多个点并显示它们之间的距离。效果很好

我想预览一下,到目前为止,已经使用UIBezierPath绘制了现实世界中的UIView。就像http://armeasure.com/

我已经尝试了很多方法来实现这一目标,但是我找不到正确的方法来实现它。

if self.linkList.count == 1 {
    bezierPath.removeAllPoints()
    bezierPath.move(to: CGPoint(x: 10,y: 10))
} else {
    guard self.linkList.count > 1 ,let object2 = self.linkList.lastNode, let object1 = self.linkList.lastNode?.previous else {return}


    let value = self.getMeasurementXandYBetween(vector1: object1.node.mainNode.position, and: object2.node.mainNode.position)
    print(value)
    let x = Double((object1.node.mainNode.position.x + value ) * 377.9527559055 )
    let y = Double((object1.node.mainNode.position.y + value) * 377.9527559055)
    let pointCoordinates = CGPoint(x: x , y: y)
    print("x : Y ",x,y)
    bezierPath.addLine(to: pointCoordinates)

}
shapeLayer.removeFromSuperlayer()
shapeLayer.path = bezierPath.cgPath
shapeLayer.lineWidth = 0.5
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.position = CGPoint(x: 0, y: 0)


self.viewToDraw.layer.addSublayer(shapeLayer)
func getMeasurementXandYBetween(vector1:SCNVector3, and vector2:SCNVector3) -> Float {
    return sqrtf((vector1.x - vector2.x) * (vector1.x - vector2.x) +  (vector1.y - vector2.y) * (vector1.y - vector2.y))
}

我使用的逻辑(不起作用的是)上一个节点的位置+我从getMeasurementXandYBetween得到的距离乘以377。

请提出提示或任何其他解决方案

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用SCNSceneRenderer上的projectPoint()来获取屏幕空间中任何点的坐标。 这将为您提供一个包含3个元素的向量,使用前两个元素构建CGPoint,然后从这些点构建形状。