使用触摸移动 SceneKit 中的特定节点
Move a specific node in SceneKit using touch
我有一个包含多个节点的场景。我想通过点击它 select 一个节点(如果我什么都不点击,我不想发生任何事情)并让他只在 XY 轴上跟随我的手指(我知道 Z 轴上的位置)。有什么方法可以将视图中的位置转换为 SceneKit 坐标吗?
经过几次研究,我发现了这个,这正是我想要的,但我没有得到代码。有人可以解释我或帮助我弄清楚如何解决我的问题吗?
https://www.youtube.com/watch?v=xn9Bt2PFp0g
func CGPointToSCNVector3(view: SCNView, depth: Float, point: CGPoint) -> SCNVector3 {
let projectedOrigin = view.projectPoint(SCNVector3Make(0, 0, depth))
let locationWithz = SCNVector3Make(Float(point.x), Float(point.y), projectedOrigin.z)
return view.unprojectPoint(locationWithz)
}
看起来很简单,我做了一个获取 3 个参数的函数。 View 是场景附加到的 SCNView,depth 是节点的 z 值,point 是表示 3D 场景在屏幕上投影的 CGPoint。
这是 作为 watchOS 的扩展(通过将 WKInterfaceSCNScene 更改为 SCNView 将其转换为 iOS):
extension CGPoint {
func scnVector3Value(view: WKInterfaceSCNScene, depth: Float) -> SCNVector3 {
let projectedOrigin = view.projectPoint(SCNVector3(0, 0, depth))
return view.unprojectPoint(SCNVector3(Float(x), Float(y), projectedOrigin.z))
}
}
我有一个包含多个节点的场景。我想通过点击它 select 一个节点(如果我什么都不点击,我不想发生任何事情)并让他只在 XY 轴上跟随我的手指(我知道 Z 轴上的位置)。有什么方法可以将视图中的位置转换为 SceneKit 坐标吗?
经过几次研究,我发现了这个,这正是我想要的,但我没有得到代码。有人可以解释我或帮助我弄清楚如何解决我的问题吗? https://www.youtube.com/watch?v=xn9Bt2PFp0g
func CGPointToSCNVector3(view: SCNView, depth: Float, point: CGPoint) -> SCNVector3 {
let projectedOrigin = view.projectPoint(SCNVector3Make(0, 0, depth))
let locationWithz = SCNVector3Make(Float(point.x), Float(point.y), projectedOrigin.z)
return view.unprojectPoint(locationWithz)
}
看起来很简单,我做了一个获取 3 个参数的函数。 View 是场景附加到的 SCNView,depth 是节点的 z 值,point 是表示 3D 场景在屏幕上投影的 CGPoint。
这是
extension CGPoint {
func scnVector3Value(view: WKInterfaceSCNScene, depth: Float) -> SCNVector3 {
let projectedOrigin = view.projectPoint(SCNVector3(0, 0, depth))
return view.unprojectPoint(SCNVector3(Float(x), Float(y), projectedOrigin.z))
}
}