【发布时间】:2018-02-09 21:01:31
【问题描述】:
我想在 SceneKit 中显示一个 3D 模型,但也想在模型中放置一些 2D 形状(例如,可以点击一个可以触发交互的圆圈)。
实现这一目标的最佳方法是什么?
它应该是什么样子:
不成功的方法:使用了一个小高度的常规SCNNode,但这不像二维图形(透视变化)
编辑:
-
现在我将圆圈作为精灵工具包节点添加到叠加视图中
sceneView.overlaySKScene = SKScene.init(size: sceneView.frame.size) sceneView.overlaySKScene?.addChild(circle) -
我还尝试获取相应节点的屏幕坐标,我想在其中显示 SpriteKit 圆圈在前面:
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { let screenPoint = sceneView.projectPoint(interactionNode!.position) print(screenPoint) circle.position = CGPoint.init(x: CGFloat(screenPoint.x), y: CGFloat(screenPoint.y))}
但是,sceneView.projectPoint 给了我很奇怪的结果,即使节点显示在屏幕中间,也有离屏范围返回...
【问题讨论】:
-
请展示你到目前为止所做的事情
-
嘿,到目前为止,我只是添加了一个高度非常小的常规 SceneKit 节点(圆柱体)(例如 0.001)。但是,这并不像我想要的那样,因为它看起来更像是模型上的“贴纸”,这意味着它的视角发生了变化,相反,它应该始终以相同的方式显示(就像 HUD)
-
你能显示一些代码吗?
-
在 SCNView 上使用基于 Spritekit 的叠加层。例如,请参阅我的答案:stackoverflow.com/questions/46298338/…
-
我看到您已经为此提出了一个新问题,只需在此处添加一个链接即可完成:stackoverflow.com/questions/48707732/… 是的,如果节点是子节点或已转换,请使用 worldposition 属性。