2

我有一个相邻的 2 个 SCNNode(1 个大盒子和 1 个小盒子)。

我旋转了它的父级,这样小盒子有时在相机中不再可见,是否有可能知道小盒子何时不再可见,因为它在大盒子后面?

我目前的结构

Scene - RootNode 
           - SCNNode (camera)
           - SCNNode (parent)
                - SCNNode (Big box)
                - SCNNode (Small box)
4

1 回答 1

2

您正在寻找的是所谓的occlusion testing,这不是 SceneKit 提供的 API 要做的事情。在一般情况下,这是一个毛茸茸的大问题。

但是,由于您只是在使用盒子,因此有很多不错的方法来伪造它。如果小盒子隐藏在大盒子后面,那么从相机位置到小盒子八个角的线将与大盒子相交。

所以:

  1. 在包含两者(根节点)的节点的坐标系中获取相机和每个角的位置。对于框角,您可以获取框节点的位置并进行数学运算以获得角,或使用SCNBoundingVolume协议。您可能需要使用一些SCNNode坐标转换方法来将所有点都放在同一个空间中。

  2. 对于每个角,使用该hitTestWithSegmentFromPoint:toPoint:options:方法进行射线测试。

  3. 如果所有八个命中测试都返回大盒子,那么小盒子完全隐藏在大盒子后面。

于 2015-04-22T20:14:18.750 回答