繁体   English   中英

从起始值到终止值绘制直线ARKit

[英]Draw straight line from start value to end value ARKit

一如既往,我需要您的帮助。 我需要从起始值(声明为SCNVector3 )绘制一条直线,并将其连接到现实世界中的位置,直到终点。

有人可以用几行代码向我解释我该怎么做? 谢谢!

您需要为相机视图控制器实现: touchesBegantouchesMovedtouchesEndedtouchesCancelled touchesBegan您需要在UITouch位置为当前的ARFrame进行hitTest 然后,您将拥有startPositionlastTouch (即您的启动UITouch

然后,您将需要添加具有0.016_667间隔(60Hz)的计时器,当相机移动时,它将使用hitTest更新您的最后触摸位置。 与在touchesMoved功能中所做的相同。 touchesMoved您还将更新lastTouch 因此,此时您将拥有startPositioncurrentPosition ,即SCNVector3 如果需要直线,则可以为那些位置重新绘制SCNCylinder(例如,半径为0.001m)。

touchesEnded最后一步,您将修复线路,或者如果touchesCancelled您将其删除并清除lastTouch

UPD

如果您需要屏幕上的2D线,则需要对projectPoint使用projectPoint。

3D线图

对于绘制3D线,您可以SCNGeometry使用扩展名:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM