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

2023-12-25

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


您可以使用SCNSceneRenderer.unprojectPoint(_:) https://developer.apple.com/documentation/scenekit/scnscenerenderer/1522631-unprojectpoint方法用于此。

该方法的实现是SCNView,将你的点的坐标作为SCNVector3。在视图的坐标空间中设置前两个元素。苹果描述了第三个元素的使用:

点参数的 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) 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从触摸位置快速获取SCNNode环境中的向量 的相关文章

随机推荐