问题标签 [scnlight]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3447 浏览

scenekit - SceneKit:向相机节点添加定向光没有效果

根据此答案中的建议,目标是向场景添加环境光以及向相机添加定向光。

这适用于 Xcode 场景编辑器,定向光设置为 70% 白色,环境光设置为 50% 白色。定向光的欧拉角使用默认值。

编码这种安排失败。就好像没有添加定向光一样。对场景没有影响;好像只有环境光存在。

欧拉角分量的不同值x没有区别——PI/2、PI 和其他值都试过了,但仍然没有变化。

但是,将定向光添加到场景的根节点 ( scene.rootNode.addChildNode(directionalLightNode)) 确实会将光添加到场景中。

0 投票
1 回答
800 浏览

scenekit - 使 SceneKit 灯只投射阴影而不照亮场景

我在 ARKit 中使用基于物理的照明来照亮我的场景,但是,我还想添加阴影以使其更加逼真。我尝试添加定向光并将强度设置为尽可能低,但我仍然无法达到我想要的效果。我基本上想要一盏灯只投射阴影并且对场景中的照明没有影响。有什么办法可以达到这个效果吗?

0 投票
2 回答
925 浏览

objective-c - iOS 12 中autoenablesDefaultLighting 太亮,SCNView.pointOfView 无效

我正在使用我的场景视图的 SceneKitautoenablesDefaultLightingallowsCameraControl功能为应用程序中的 obj 3D 模型提供光,并在 Objective-C 中围绕该对象旋转。升级到iOS12后,默认光照强度autoenablesDefaultLighting变高了,3D模型看起来很亮!

有没有人遇到过同样的问题?如果是,有没有办法控制autoenablesDefaultLighting其值为“是”时的光强度?如果它不可编辑,我尝试通过创建一个节点将全向光或定向光附加/约束到相机,为该节点分配一个灯光并添加为子节点,SCNView.pointOfView但没有灯光照亮场景。

示例:
iOS 12 之前
显示的 3D 对象 iOS 12 中显示的 3D 对象

如果有人可以帮助我,那就太好了。

非常感谢!

编辑以解决此问题

我创建一个新的 SCNCamera 并将其添加到节点中并设置我的 scnView 的 PointOfView。激活此相机的 HDR,scnView.pointOfView.wantHDR = YES; 但背景为灰色。

要删除灰色背景,我删除了背景颜色scnView.backgroundColor = [UIColor ClearColor] 并将相机的曝光设置为 -1:

self.scnView.pointOfView.camera.minimumExposure = -1; self.scnView.pointOfView.camera.maximumExposure = -1;

谢谢

0 投票
0 回答
131 浏览

augmented-reality - 如何防止 SCNNode 接收到任何类型的阴影?

我在 SCNNode(头骨)上有一个聚光灯,我希望阴影只投射在头骨上。

在此处输入图像描述

我怎样才能防止不是头骨的其他节点(参见照片中头骨下方的节点)接收任何类型的阴影?

0 投票
2 回答
351 浏览

ios - 如何使用 Swift 在 SceneKit 中创建圆盘形光源

我希望创建一个类似于太阳使用 SceneKit 照亮地球的方式的光源。这是一个业余天文学课程项目。由于太阳比地球大,所以全向 SCNLight 不会这样做,因为它发出的光是从一个点发出的。从太阳发出的光基本上是从一个非常大的球体发出的,而不是一个点。

此图像是使用全向光源创建的,但并未真实显示地球的阴影区域。具体来说,北极没有亮,但应该亮(在这种情况下,我们是在夏天。图片

第二张图像更逼真,你可以看到北极被照亮,就像在夏天一样。

在此处输入图像描述

问题是要获得第二张图像,我必须非常繁琐地定位定向光以使图像正确(这是我手动完成的。对于第一张图像,我只是将全向光定位在与太阳相同的位置领域)。由于整个物体是动画的,使用定向光并且必须随着地球沿着其轨道前进而不断地重新定位它,这将需要一些相当复杂的数学运算。

所以我想创建一个使用以编程方式创建的模型 I/O 灯光对象初始化的 SCNLight。根据 Apple 的“文档”,在 Swift 中,可以使用来自指定模型 I/O 灯光对象的初始化程序创建 SCNLight ,据我了解,它允许创建“光源”,从一个圆盘状区域"

“文档”为“创建灯光”说明了以下内容:

它被定义为便利初始化器:

便利初始化(mdlLight:MDLLight)

我期望能够做到以下几点:

但最后一条语句让我知道:“无法将 'MDLLight' 类型的值转换为预期的参数类型 'NSCoder'”错误。我也试过:

但那里也没有运气。

我完全被困住了!感觉在 Swift 中使用初始化器有一些基本的东西我不明白。

任何意见将不胜感激。

编辑:根据相同的文档,我还在objective-C中尝试了以下内容:

但得到这个错误:“选择器'lightWithSCNLight:'没有已知的类方法”

编辑:感谢@EmilioPelaez 解决了这个问题。

我已经将完整的代码与所需的照明放在下面,也许它会对其他人有所帮助。