Ios 从起始值到结束值画一条直线

Ios 从起始值到结束值画一条直线,ios,swift,arkit,Ios,Swift,Arkit,像往常一样,我需要你的帮助。我需要从一个起始值(声明为scinvector3)画一条直线,并连接到现实世界中的位置,直到终点 有人能用几行代码向我解释一下我该怎么做吗? 谢谢大家! 您需要实施: 触摸开始,触摸移动,触摸结束,触摸取消 用于摄影机视图控制器。 在触摸开始中,您需要在UITouch位置对当前ARFrame进行hitTest。然后您将拥有您的开始位置和最后一次触摸,这是您的开始UITouch 然后,您需要添加间隔为60Hz的计时器,当您移动相机时,该计时器将使用“hitTest”更新

像往常一样,我需要你的帮助。我需要从一个起始值(声明为
scinvector3
)画一条直线,并连接到现实世界中的位置,直到终点

有人能用几行代码向我解释一下我该怎么做吗? 谢谢大家!

您需要实施:
触摸开始
触摸移动
触摸结束
触摸取消
用于摄影机视图控制器。 在
触摸开始
中,您需要在
UITouch
位置对当前ARFrame进行
hitTest
。然后您将拥有您的
开始位置
最后一次触摸
,这是您的开始
UITouch

然后,您需要添加间隔为60Hz的计时器,当您移动相机时,该计时器将使用“hitTest”更新您的最后一次触摸位置。您将在
触摸移动功能中执行相同操作。在
touchsmoved
中,您还将更新您的
lastTouch
。因此,此时您将拥有
startPosition
currentPosition
,即
scinvector3
。如果需要直线,您可以为这些位置重新绘制SCNCylinder(例如,半径为0.001m)

touchesend
的最后一步,您将修复线路,或者如果
touchecancelled
您将删除线路并清除
lastTouch

UPD

如果您需要在屏幕上显示2D线条,则需要在ARSceneView中使用
projectPoint

三维线条绘制

对于绘制三维线,您可以使用扩展名
scngometry

extension SCNGeometry {
    class func line(from vector1: SCNVector3, to vector2: SCNVector3) -> SCNGeometry {
        let indices: [Int32] = [0, 1]
        let source = SCNGeometrySource(vertices: [vector1, vector2])
        let element = SCNGeometryElement(indices: indices, primitiveType: .line)
        return SCNGeometry(sources: [source], elements: [element])
    }
}
使用:

let line = SCNGeometry.line(from: startPosition, to: endPosition)
let lineNode = SCNNode(geometry: line)
lineNode.position = SCNVector3Zero
sceneView.scene.rootNode.addChildNode(lineNode)

是的,我需要一条直线,而不仅仅是画一条线。非常感谢。你能再澄清一点吗?你在现实世界中一直坚持到底是什么意思?嗨,艾伦,谢谢你的提问。我有一个touchesbeent函数,它开始监控场景,因为这个函数,我想开始画一条直线,直到我将手指从屏幕上移除,事件将返回直线,直到我移除手指的最后一个位置。你想要场景中的3D线还是UIView上的2D线?非常感谢你的帮助解释。我已经有了一个touchesBegind和touchesEnded函数,但我还没有真正了解如何绘制SCNCylinder以及代码如何理解如何连接起点和终点?我需要在触摸屏上设置节点1,从起始位置开始,相同,但在触摸屏内设置第二个节点?@Pietromesineo您可以尝试
let line=scngometry.triangleFrom(vector1:startPoint,vector2:startPoint,vector3:endPoint)
然后
let lineNode=SCNNode(几何体:line)
有一个很好的例子:谢谢!我会尽快试一试;)我不知道为什么,但是:“类型'scngometry'没有成员'triangleFrom'”