Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ARKit在摄像机的前方做一个灯光点?_Ios_Scenekit_Arkit - Fatal编程技术网

Ios ARKit在摄像机的前方做一个灯光点?

Ios ARKit在摄像机的前方做一个灯光点?,ios,scenekit,arkit,Ios,Scenekit,Arkit,因此,我可以访问sceneView.pointOfView,我想让AR体验感觉就像我正对着我的对象直接闪烁闪光灯,当我指向它们时,它们就会变亮 我试图创造一个这样的聚光灯: let spotLight = SCNLight() spotLight.type = .spot spotLight.spotInnerAngle = 60 spotLight.spotOuterAngle = 60 let spotNode = SCNNode() spotNode.light = spotLight s

因此,我可以访问
sceneView.pointOfView
,我想让AR体验感觉就像我正对着我的对象直接闪烁闪光灯,当我指向它们时,它们就会变亮

我试图创造一个这样的聚光灯:

let spotLight = SCNLight()
spotLight.type = .spot
spotLight.spotInnerAngle = 60
spotLight.spotOuterAngle = 60
let spotNode = SCNNode()
spotNode.light = spotLight
spotNode.position = position
然后我认为,将灯光添加到pointOfView节点将使其与摄影机一起移动,这意味着它将始终在前方发光

sceneView.pointOfView?.addChildNode(spotLight)
这不起作用,对象显示为黑色,没有灯光

我做错了什么?我想让光线指向我在AR体验中看到的东西,就像我拿着手电筒,一直向前照一样


有什么建议吗?

您是否正在寻找一种虚拟手电筒,它可以真实地照亮摄影机提要中的真实场景?这是一个很高的要求

基本上,你说的是将一个光锥投影到每个真实可见的表面上,这需要检测和建模这些表面,这比水平面检测要多得多

(如果你不想真实地照亮真实世界的场景,你需要做的就是把半透明的白色圆圈放在视图的中间。也许可以用混合模式来想象。对于一个更现实的小点来说,改变你的圆的大小,或者基于你对Ar场景的中心,你的圆的3D距离)。


你想要一个虚拟手电筒来照亮你放在AR中的虚拟物体吗?这很容易做到。事实上,代码是实现这一点的主要方法。可能出现的问题:

spotNode.position = position
你上面的片段没有说你是从哪里得到这个职位的。如果要将聚光灯节点附加到摄影机,则该节点应为零向量。也就是说,您希望它在摄影机节点的局部空间中具有中性位置。将此向量设置为非零将使光源从摄影机位置偏移恒定的位移(可能会导致灯光在场景中不起任何作用)

根据此代码的运行时间,
sceneView.pointOfView
可能为零,因此您实际上没有执行
addChildNode
调用。在添加子节点之前,请检查以确保摄影机节点存在。(我尝试将此代码添加到示例代码中-如果您将其放入其
ARSCNView.setup()
函数中,您应该会看到您放置的任何虚拟对象被明亮的聚光灯完全照亮。)


顺便说一句,你不一定需要在
视点节点中添加一个子节点来固定灯光,
视点节点可以同时连接相机和灯光。

我最终将聚光灯连接到视点,就像你在最后提到的那样。这让我实现了我想要的。非常感谢。
sceneView.pointOfView?.addChildNode(spotLight)