gpt4 book ai didi

ios - ARKit 使 SCNLight 指向相机正在看的地方?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:26 26 4
gpt4 key购买 nike

因此,我可以访问 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 体验看到的东西,就好像我拿着手电筒,我正朝着前方照亮....

有什么建议吗?

最佳答案

您是否正在寻找一款能够真实地照亮相机画面中真实世界场景的虚拟手电筒?这是一个非常高的要求。

您基本上是在谈论将光锥投影映射到每个可见的真实世界表面上,这需要检测和建模这些表面,这比水平面检测 ARKit 做的要多得多。

(如果你想不真实地照亮现实世界的场景,你需要做的就是在 View 中间放置一个半透明的白色圆圈。也许喜欢混合模式。再多一点逼真,根据 AR 场景的 View 中心 hit-testing 改变圆圈的大小或 3D 距离。)


您想要一个虚拟手电筒来照亮您在 AR 中放置的虚拟对象吗?这很容易做到。事实上,您的代码是实现这一目标的大部分方法。可能出现的问题:

spotNode.position = position

您上面的代码片段没有说明您是从哪里获得这个职位的。如果你想让聚光灯节点连接到相机,它应该是一个零向量。也就是说,您希望它在相机节点的局部空间中具有中性位置。将此向量设置为非零值会使您的光源从相机位置偏移一个恒定的位移(可能会导致光线在您的场景中没有任何用处)。

sceneView.pointOfView?.addChildNode(spotLight)

根据此代码运行的时间,sceneView.pointOfView 可能为 nil,因此您实际上并未执行 addChildNode 调用。在向其添加子节点之前检查以确保相机节点存在。 (我尝试将此代码添加到 ARKit WWDC17 session 中的示例代码中——如果您将其放入他们的 ARSCNView.setup() 函数中,您应该会看到您放置的任何虚拟对象都被明亮的聚光灯。)

顺便说一句,您不一定需要将子节点添加到 pointOfView 节点来容纳光 — pointOfView 节点可以同时具有摄像头和附有灯。

关于ios - ARKit 使 SCNLight 指向相机正在看的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44975983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com