我在pointofview中有一个指向节点的箭头。我希望只有在屏幕中看不到节点时才会出现该箭头。
我找到了一种方法:
项目点8节点边界框的角点并检查是否:
1)任何一点都在屏幕内
2)点的任何边缘位于屏幕内
3)任何平面位于屏幕内
但它看起来非常困难和混乱。
那么有没有更简单的方法呢?
答案 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.
}
请注意,如文档所述,这不会执行遮挡测试。这意味着完全出现在另一个节点后面的节点(即完全被遮挡)可能不是可见,但仍然在视锥体内。