首页 文章

如何在 SceneKit 的 sceneView 中正确添加阴影定向光?

提问于
浏览
2

我正在学习 ARKit。我将虚拟对象置于增强现实场景中并在这些问题上挣扎!

我正在使用 github 的这个演示项目

**1 -**如何在 SceneKit 的 SceneView 中为所有(单独)节点添加一个方向灯,并使用摄像机位置移动方向灯?这样我添加的阴影也可以随着光线方向移动。

如果我翻译对象阴影正在按预期工作。但如果我现在旋转物体阴影不应该在计划上移动。由于光线处于固定位置,它们正在移动。

**2 -**阴影看起来很好,以防万一如果我在飞机上只添加一个物体。但是,如果我添加两个或更多对象,则在 SceneView 中添加更多方向性灯光。现在每个对象都有多个阴影。我希望它只限制一个阴影。

在此输入图像描述

在此输入图像描述

我在 sceneKit 编辑器中添加了光影平面。 (不是以编程方式)。这是我的 scenekit 编辑器的截图。

在此输入图像描述

在此输入图像描述

**3 -**我已阅读并确认阴影仅添加如果我将方向灯属性设置为deffered。但在这种情况下,应用程序崩溃如果我调用从 sceneView 的根节点删除所有节点。我的删除节点代码是。

self.sceneView.scene.rootNode.enumerateChildNodes { (node, stop) -> Void in
    node.removeFromParentNode()
    print("removed ", node.name as Any)
}

您可以观看我的应用视频以获得更多许可。 应用视频,它现在如何工作

我的要求是只为每个对象添加一个阴影。当我旋转并转换对象时,阴影看起来应该是真实的。

我也尝试过从花瓶的 scn 文件中删除光线,并添加一个单独的 light.scn 文件,其中只有光。在 sceneView 中添加了这两个(花瓶和灯光)节点。但没有阴影出现。

1 回答

  • 0
    • 定向灯仅从着色器中按其方向解释(一个 light-red 矢量从 Xcode 中的节点出来)。光的位置在哪里都没关系。定向光通常用于模仿太阳光。

    • 我实施了一个类似的项目,所以这是我的尝试。当我初始化SCNScene时,我从单独的 SCN-File 添加了一个方向光到场景。我的设置:

    • castsShadow: true

    • mode: deferred(我的应用程序没有崩溃,如果我从场景中删除我的对象:/)

    事实上,这使它在我的项目中发挥作用。关于你的飞机的一件事:我认为你没有在飞机上禁用castsShadow。因此用户可以看到飞机。

    编辑:我可以重现崩溃。移除定向灯时会发生这种情况。这就是为什么应用程序没有在我的项目中崩溃。所以你可以像我一样做,并在viewDidLoad()中添加方向灯。

相关问题