1

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

4

2 回答 2

6

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

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

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

于 2014-07-31T05:36:52.903 回答
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

于 2014-07-30T23:13:27.177 回答