【问题标题】:SceneKit - Occlusion cullingSceneKit - 遮挡剔除
【发布时间】:2014-09-22 13:03:00
【问题描述】:

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

【问题讨论】:

    标签: ios8 scenekit occlusion-culling


    【解决方案1】:

    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:

    【讨论】:

      【解决方案2】:

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

      如果您需要遮挡测试,平截头体测试是一个不错的起点。一旦您知道一个节点在视锥体中,您可以执行hit tests 以查看其间是否有任何节点。如果命中测试的结果包括您的目标以外的节点,它可能至少部分被遮挡。

      命中测试不会为您提供极端细节(例如一个节点的任何渲染像素是否在其他节点的像素后面可见),但它可能足以满足您的需要。您可以使用options 参数并通过选择要测试的点来稍微改进命中测试的灵敏度——例如只是目标节点的中心或其边界框的角。命中测试也有 CPU 性能成本,因此您必须在所需功能和目标帧速率之间找到正确的折衷。

      【讨论】:

      • 谢谢瑞克斯特。我会试一试,让你知道它的效果如何。
      猜你喜欢
      • 2011-06-27
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多