【发布时间】:2014-09-22 13:03:00
【问题描述】:
我在 iOS 8 上使用 SceneKit 已经有一段时间了,最近,我遇到了一种情况,我需要检测一个节点是否没有出现在视口上。遮挡剔除可能是一种可能的解决方案。因此,SceneKit 是否提供任何遮挡剔除选项,如果没有,我可能想尝试哪些其他建议?谢谢!
【问题讨论】:
标签: ios8 scenekit occlusion-culling
我在 iOS 8 上使用 SceneKit 已经有一段时间了,最近,我遇到了一种情况,我需要检测一个节点是否没有出现在视口上。遮挡剔除可能是一种可能的解决方案。因此,SceneKit 是否提供任何遮挡剔除选项,如果没有,我可能想尝试哪些其他建议?谢谢!
【问题讨论】:
标签: ios8 scenekit occlusion-culling
SCNView,通过 SCNSceneRenderer 协议实现 isNodeInsideFrustum:withPointOfView:
它可以让您测试一个节点是否从给定的相机可见。
【讨论】:
isNodeInsideFrustum:withPointOfView:
方法告诉您一个节点是否在相机的视野内,但它不会告诉您它是否被其他场景几何体遮挡。
如果您需要遮挡测试,平截头体测试是一个不错的起点。一旦您知道一个节点在视锥体中,您可以执行hit tests 以查看其间是否有任何节点。如果命中测试的结果包括您的目标以外的节点,它可能至少部分被遮挡。
命中测试不会为您提供极端细节(例如一个节点的任何渲染像素是否在其他节点的像素后面可见),但它可能足以满足您的需要。您可以使用options 参数并通过选择要测试的点来稍微改进命中测试的灵敏度——例如只是目标节点的中心或其边界框的角。命中测试也有 CPU 性能成本,因此您必须在所需功能和目标帧速率之间找到正确的折衷。
【讨论】: