问题标签 [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.
scenekit - SceneKit:向相机节点添加定向光没有效果
根据此答案中的建议,目标是向场景添加环境光以及向相机添加定向光。
这适用于 Xcode 场景编辑器,定向光设置为 70% 白色,环境光设置为 50% 白色。定向光的欧拉角使用默认值。
编码这种安排失败。就好像没有添加定向光一样。对场景没有影响;好像只有环境光存在。
欧拉角分量的不同值x
没有区别——PI/2、PI 和其他值都试过了,但仍然没有变化。
但是,将定向光添加到场景的根节点 ( scene.rootNode.addChildNode(directionalLightNode)
) 确实会将光添加到场景中。
scenekit - 使 SceneKit 灯只投射阴影而不照亮场景
我在 ARKit 中使用基于物理的照明来照亮我的场景,但是,我还想添加阴影以使其更加逼真。我尝试添加定向光并将强度设置为尽可能低,但我仍然无法达到我想要的效果。我基本上想要一盏灯只投射阴影并且对场景中的照明没有影响。有什么办法可以达到这个效果吗?
objective-c - iOS 12 中autoenablesDefaultLighting 太亮,SCNView.pointOfView 无效
我正在使用我的场景视图的 SceneKitautoenablesDefaultLighting
和allowsCameraControl
功能为应用程序中的 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;
谢谢
ios - 如何使用 Swift 在 SceneKit 中创建圆盘形光源
我希望创建一个类似于太阳使用 SceneKit 照亮地球的方式的光源。这是一个业余天文学课程项目。由于太阳比地球大,所以全向 SCNLight 不会这样做,因为它发出的光是从一个点发出的。从太阳发出的光基本上是从一个非常大的球体发出的,而不是一个点。
此图像是使用全向光源创建的,但并未真实显示地球的阴影区域。具体来说,北极没有亮,但应该亮(在这种情况下,我们是在夏天。
第二张图像更逼真,你可以看到北极被照亮,就像在夏天一样。
问题是要获得第二张图像,我必须非常繁琐地定位定向光以使图像正确(这是我手动完成的。对于第一张图像,我只是将全向光定位在与太阳相同的位置领域)。由于整个物体是动画的,使用定向光并且必须随着地球沿着其轨道前进而不断地重新定位它,这将需要一些相当复杂的数学运算。
所以我想创建一个使用以编程方式创建的模型 I/O 灯光对象初始化的 SCNLight。根据 Apple 的“文档”,在 Swift 中,可以使用来自指定模型 I/O 灯光对象的初始化程序创建 SCNLight ,据我了解,它允许创建“光源”,从一个圆盘状区域"
“文档”为“创建灯光”说明了以下内容:
它被定义为便利初始化器:
我期望能够做到以下几点:
但最后一条语句让我知道:“无法将 'MDLLight' 类型的值转换为预期的参数类型 'NSCoder'”错误。我也试过:
但那里也没有运气。
我完全被困住了!感觉在 Swift 中使用初始化器有一些基本的东西我不明白。
任何意见将不胜感激。
编辑:根据相同的文档,我还在objective-C中尝试了以下内容:
但得到这个错误:“选择器'lightWithSCNLight:'没有已知的类方法”
编辑:感谢@EmilioPelaez 解决了这个问题。
我已经将完整的代码与所需的照明放在下面,也许它会对其他人有所帮助。