如何知道在SceneKit中节点是否在屏幕中可见?

时间:2017-12-15 08:32:57

标签: ios scenekit

我在pointofview中有一个指向节点的箭头。我希望只有在屏幕中看不到节点时才会出现该箭头。

我找到了一种方法:
项目点8节点边界框​​的角点并检查是否:
1)任何一点都在屏幕内 2)点的任何边缘位于屏幕内 3)任何平面位于屏幕内

但它看起来非常困难和混乱。

那么有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:9)

您可以使用isNode(_:insideFrustumOf:)检查给定节点的边界框是否与另一个节点的view frustum点相交,以指示该节点是否可能< / em>可见。

它是SCNSceneRendered上的一种实例方法,这意味着它可以在SCNView上使用:

if let pointOfView = sceneView.pointOfView {
    let isMaybeVisible = sceneView.isNode(yourNode, insideFrustumOf: pointOfView)
    // `yourNode` is in the scene's view frustum and might be visible. 
}

请注意,如文档所述,这不会执行遮挡测试。这意味着完全出现在另一个节点后面的节点(即完全被遮挡)可能不是可见,但仍然在视锥体内。