菜鸟教程小白 发表于 2022-12-11 18:57:58

ios - 如何在 SceneKit 的场景 View 中为阴影正确添加定向光?


                                            <p><p>我正在学习 ARKit。我将虚拟对象放置在增强现实场景中并努力解决这些问题!</p>

<blockquote>
<p><a href="https://github.com/ignacio-chiazzo/ARKit" rel="noreferrer noopener nofollow">I am using this demo project from github</a></p>
</blockquote>

<p><strong>1-</strong> 如何在 SceneKit 的 SceneView 中为所有(单独的)节点仅添加一个定向灯并随相机位置移动定向灯?这样我添加的阴影也可以随着光线方向移动。 </p>

<p>如果我翻译对象阴影,它应该是正常工作的。但是如果我现在旋转对象,阴影不应该在计划上移动。它们正在移动,因为光线处于固定位置。</p>

<p><strong>2-</strong> 只有在我只在平面上添加一个对象的情况下,阴影才会看起来不错。但是,如果我添加两个或更多对象,则会在 SceneView 中添加更多定向灯。现在每个物体都有不止一个阴影。我希望它只限制一个影子。 </p>

<p> <a href="/image/7eRjP.png" rel="noreferrer noopener nofollow"><img src="/image/7eRjP.png" alt="enter image description here"/></a> <a href="/image/0iKya.png" rel="noreferrer noopener nofollow"><img src="/image/0iKya.png" alt="enter image description here"/></a> </p>

<p>我在 sceneKit 编辑器中添加了光影平面。 (不是以编程方式)。这是我的场景工具包编辑器的屏幕截图。 </p>

<p> <a href="/image/MjkkO.jpg" rel="noreferrer noopener nofollow"><img src="/image/MjkkO.jpg" alt="enter image description here"/></a> <a href="/image/T09kC.jpg" rel="noreferrer noopener nofollow"><img src="/image/T09kC.jpg" alt="enter image description here"/></a> </p>

<p><strong>3-</strong> 我已阅读并确认只有当我将定向光属性设置为 <code>defered</code> 时才会添加阴影。但在这种情况下,如果我调用从场景 View 的根节点中删除所有节点,应用程序就会崩溃。我的删除节点代码是。</p>

<pre><code>self.sceneView.scene.rootNode.enumerateChildNodes { (node, stop) -&gt; Void in
    node.removeFromParentNode()
    print(&#34;removed &#34;, node.name as Any)
}
</code></pre>

<p>您可以观看我的应用视频以获得更多许可。 <a href="http://bugdevstudios.com//vase.mp4" rel="noreferrer noopener nofollow">Apps video, How it is working now</a> </p>

<p>我的要求是只为每个对象添加一个阴影。当我旋转和平移对象时,阴影应该看起来很真实。 </p>

<p>我也尝试过从花瓶的 scn 文件中删除光,并添加一个单独的 light.scn 文件,其中只有光。在场景 View 中添加了这两个(花瓶和灯)节点。但是没有影子出现。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><ol>
<li><p>方向光仅从着色器解释为它们的方向(从 Xcode 中的节点出来的一个浅红色矢量)。光的位置在哪里都没有关系。定向光通常用于模仿太阳光。</p></li>
<li><p>我实现了一个类似的项目,所以这是我的尝试。
当我初始化 <code>SCNScene</code> 时,我从一个单独的 SCN 文件向场景添加了一个定向光。
我的设置:</p>

<ul>
<li><code>castsShadow: true</code></li>
<li><code>mode: deferred</code>(如果我从场景中移除我的对象,我的应用程序不会崩溃:/)</li>
</ul></li>
</ol>

<p>实际上就是为了让它在我的项目中工作。
关于你的飞机的一件事:我认为你没有在飞机上禁用 <code>castsShadow</code>。因此用户可以看到平面。 </p>

<p>编辑:
我可以重现崩溃。移除定向光时确实会发生这种情况。这就是为什么该应用程序在我的项目中没有崩溃的原因。所以你可以像我一样做,例如在 <code>viewDidLoad()</code> 中添加定向光。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 SceneKit 的场景 View 中为阴影正确添加定向光?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46681712/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46681712/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 SceneKit 的场景 View 中为阴影正确添加定向光?