从触摸位置 swift 获取 SCNNode 环境中的矢量

brw*_*w59 2 vector ios scenekit swift scnnode

我有我的相机的位置和方向,屏幕上的 CGPoint 触摸位置,我需要在我的 3d SCNNode 环境中我在屏幕上触摸的方向上的线(最好是矢量),我怎样才能得到这个?
代码片段将非常有帮助。

jls*_*ert 5

您可以SCNSceneRenderer.unprojectPoint(_:)为此使用该方法。

此方法由 实现SCNView,将您点的坐标作为SCNVector3。在视图的坐标空间中设置前两个元素。苹果描述了第三个元素的使用:

点参数的 z 坐标描述了相对于渲染器视锥体(由其 pointOfView 节点定义)的近和远裁剪平面取消投影点的深度。取消投影 z 坐标为 0.0 的点将返回近剪裁平面上的一个点;取消投影 z 坐标为 1.0 的点将返回远剪裁平面上的一个点。

您不是在寻找这些点的位置,而是在寻找连接它们的线。只需减去两者即可得到这条线。

func getDirection(for point: CGPoint, in view: SCNView) -> SCNVector3 {
    let farPoint  = view.unprojectPoint(SCNVector3Make(point.x, point.y, 1))
    let nearPoint = view.unprojectPoint(SCNVector3Make(point.x, point.y, 0))

    return SCNVector3Make(farPoint.x - nearPoint.x, farPoint.y - nearPoint.y, farPoint.z - nearPoint.z) 
}
Run Code Online (Sandbox Code Playgroud)