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

时间:2017-07-08 21:48:42

标签: ios swift vector scenekit scnnode

我有我的相机的位置和方向,屏幕上的CGPoint触摸位置,我需要在我的3D SCNNode环境中触摸屏幕的方向上的线(最好是矢量),我该怎么做到这一点?
代码片段会非常有用。

1 个答案:

答案 0 :(得分:3)

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

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

  

点参数的z坐标描述了相对于渲染器的视锥体的近和远剪切平面取消投影点的深度(由其定义)   观点看法    节点)。取消投影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) 
}