菜鸟教程小白 发表于 2022-12-12 15:07:43

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


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

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

<p>我目前的结构</p>

<pre><code>Scene - RootNode
         - SCNNode (camera)
         - SCNNode (parent)
                - SCNNode (Big box)
                - SCNNode (Small box)
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您正在寻找的是<em>遮挡测试</em>,它不是 SceneKit 提供的 API 来做的。在一般情况下,这是一个大毛病。</p>

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

<p>所以:</p>

<ol>
<li><p>在包含两者的节点(根节点)的坐标系中获取相机和每个角的位置。对于盒子的角,您可以获取盒子节点的位置并进行数学运算以获得角,或者使用 <code>SCNBoundingVolume</code> 协议(protocol)。您可能需要使用一些 <code>SCNNode</code> 坐标转换方法来获取同一空间中的所有点。</p></li>
<li><p>对于每个角,使用 <a href="https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SCNNode_Class/index.html#//apple_ref/occ/instm/SCNNode/hitTestWithSegmentFromPoint:toPoint:options:" rel="noreferrer noopener nofollow"><code>hitTestWithSegmentFromPoint:toPoint:options:</code></a> 进行射线测试方法。</p></li>
<li><p>如果所有八个 HitTest 都返回大框,则小框完全隐藏在大框后面。</p></li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于ios - SceneKit,测试 SCNNode 是否完全可见,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29799485/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29799485/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - SceneKit,测试 SCNNode 是否完全可见