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

Alo*_*edi 3 ios scenekit

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

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

但它似乎非常困难和混乱.

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

Dav*_*ist 13

您可以使用isNode(_:insideFrustumOf:)检查给定节点的边界框是否与另一个节点的视点的视锥体相交,以指示该节点是否可见.

这是一个实例方法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. 
}
Run Code Online (Sandbox Code Playgroud)

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

  • 你在哪里做?每秒调用一个方法并检查其内部吗?N个标记呢? (2认同)