繁体   English   中英

SceneKit,测试 SCNNode 是否完全可见

[英]SceneKit, test if SCNNode completely visible

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

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

我目前的结构

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

您正在寻找的是occlusion testing ,而不是 SceneKit 提供 API 来做的事情。 在一般情况下,这是一个大毛病。

但是,由于您只是在使用盒子,因此有相当不错的方法可以伪造它。 如果小盒子隐藏在大盒子后面,那么从相机位置到小盒子八个角中的每一个角的线都会与大盒子相交。

所以:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM