从触摸位置快速获取SCNNode环境中的vector

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

您可以使用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) }