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