ios - SceneKit,测试SCNNode是否完全可见

标签 ios scenekit scnnode

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

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

我目前的结构

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

最佳答案

您正在寻找的东西称为遮挡测试,这不是 SceneKit 提供的 API 可以做的事情。在一般情况下,这是一个大问题。

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

所以:

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

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

  3. 如果所有八个 HitTest 都返回大框,则小框完全隐藏在大框后面。

关于ios - SceneKit,测试SCNNode是否完全可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799485/

相关文章:

ios - 将 2D 形状添加到 SceneKit

ios - 将 SCNNode 放置在平面上并检测节点是否被点击

swift - 展开后改变了 SCNNodes 的位置

ios - Swift 中图像/剪影的轮廓路径

ios - Xamarin 表格 : Launcher icon for ios

ios - React Native 从 0.50.4 升级到 0.55.3 没有给出这样的文件或目录 Yoga.c 错误

iphone - AFNetworking POST并取回数据

swift - 复制 SCNParticleSystem 似乎效果不佳

ios - 为什么 SCNNode.presentation.position 相对较慢,有解决方法吗?

swift - 如何水平对齐2个SCNNode?