Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从触摸位置获取SCNNode环境中的矢量_Ios_Swift_Vector_Scenekit_Scnnode - Fatal编程技术网

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

Ios 从触摸位置获取SCNNode环境中的矢量,ios,swift,vector,scenekit,scnnode,Ios,Swift,Vector,Scenekit,Scnnode,我有我的相机的位置和方向,屏幕上的CGPoint触摸位置,我需要在我的3d SCNNode环境中我在屏幕上触摸的方向上的线(最好是矢量),我如何才能得到它? 代码片段将非常有用。您可以使用此方法 此方法由SCNView实现,将点的坐标作为SCNVector3。在视图的坐标空间中设置前两个图元。Apple介绍了第三个元素的使用: “点”参数的z坐标描述相对于渲染器视锥台的近剪裁平面和远剪裁平面(由其定义)取消投影点的深度 观点 节点)。取消投影z坐标为0.0的点将返回近剪裁平面上的点;取消投影z坐

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

您可以使用此方法

此方法由
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) 
}