SceneKit - 遮挡剔除

时间:2014-07-30 18:36:53

标签: ios8 scenekit occlusion-culling

我已经在iOS 8上使用SceneKit很长一段时间了,最​​近,我遇到了一种情况,我需要检测一个节点是否没有出现在视口上。遮挡剔除可能是一种可能的解决方案。因此,SceneKit是否有任何遮挡剔除选项,如果没有,我可能想尝试的其他建议是什么?谢谢!

2 个答案:

答案 0 :(得分:6)

isNodeInsideFrustum:withPointOfView: 方法告诉您节点是否在摄像机的视野范围内,但它不会告诉您它是否被其他场景几何体遮挡。

如果您需要遮挡测试,平截头体测试是一个很好的起点。一旦您知道某个节点位于视锥体中,您就可以hit tests查看其间是否有任何节点。如果命中测试的结果包括目标以外的节点,则可能至少部分模糊。

命中测试不会给你带来极端的细节(比如一个节点的任何渲染像素是否会在其他节点后面可见),但它可能足以满足你的需要。您可以使用options参数并选择要测试的点来优化命中测试的灵敏度 - 例如只是目标节点的中心或其边界框的角。命中测试也具有CPU性能成本,因此您必须在所需功能和目标帧速率之间找到正确的权衡。

答案 1 :(得分:0)

SCNView,通过SCNSceneRenderer协议实现 isNodeInsideFrustum:withPointOfView:

它允许您测试节点是否在给定摄像机中可见。

https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/Reference/SCNSceneRenderer.html#//apple_ref/occ/intfm/SCNSceneRenderer/isNodeInsideFrustum:withPointOfView