2017-07-08 33 views

回答

1

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

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

点参数的z坐标描述了在其中相对于所述渲染器的观看平截头体的近端和远端剪切平面中的点到unproject深度(通过其 定义pointOfView node)。取消投影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) 
} 
+0

非常感谢,谢谢 – brw59