我有一个包含多个节点的场景。我想通过点击它来选择一个节点(如果我点击什么我什么也不想发生)并让他只在XY轴上跟随我的手指(我知道Z轴上的位置)。是否有任何方法可以将视图中的位置转换为SceneKit coords?
经过一些研究我发现了这个,这正是我想要的,但我没有得到代码。有人可以解释我或帮我解释如何解决我的问题? https://www.youtube.com/watch?v=xn9Bt2PFp0g
答案 0 :(得分:2)
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个参数的函数。视图是附加场景的SCNView,深度是节点的z值,而点是表示3D场景在屏幕上投影的CGPoint。
答案 1 :(得分:0)
这是Alec Firtulescu's answer作为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))
}
}