- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
因此,我可以访问 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/
假设我们有一个房间,灯位于房间的垂直和水平中间。它怎么能四面八方投下影子呢?反正有造假的吗?我有移动的物体。 SCNLightTypeSpot 可以在圆锥体中转换阴影,但在这种情况下不起作用。 最佳答
我添加了一些环境光、定向光和地板,但仍然没有出现阴影!知道为什么吗? // create and add ambient light to the scene let ambientLightNode
我正在尝试从场景的左侧转换一个短的暗影。我的灯光设置如下: func setupLights() { // Create shadow let spotLight = SCNLight
因此,我可以访问 sceneView.pointOfView,并且我想让 AR 体验感觉就像我在我正前方用手电筒照亮我所看到的物体,当我指向它时,它会变亮在他们身上。 我试着像这样创建一个聚光灯: l
我有一个聚光灯,用下面的代码创建,在我所有的节点上转换阴影: spotLight.type = SCNLightTypeSpot spotLight.spotInnerAngle = 50.0
var sun = SCNNode(geometry: SCNSphere(radius:0.35)) sun.geometry?.firstMaterial?.diffuse.contents=#
这是我发现的一种奇怪的现象。有一个非常简单的例子,我有一个空的 ARSCNView,只有 rootnode 和 camera,所以这意味着相机是打开的,但屏幕上没有任何东西(只有相机)。 我从 vie
我必须将目标版本从 iOS 10 降低到 9。我的问题之一是如何适本地替换此代码: if #available(iOS 10.0, *) { target.light?.intensity =
我正在尝试将 SCNLight 添加到 SceneKit 中的 SCNSphere (SCNNode)。它的效果令人惊叹,唯一的问题是 SCNLight 所连接的源球体是完全黑色的,因为作为源,它根本
我有一个简单的 SceneKit 场景,只有两个光源(环境光源和全向光源)和一个模型。我注意到,在 iOS 10 上运行时,我的场景显得完全黑暗(甚至在我使用 iOS 10 SDK 重新编译我的应用程
好像是! 这里忽略了 categoryBitMask: ambientLight = [SCNLight light]; ambientLight.color = [UIColor colorWith
我是一名优秀的程序员,十分优秀!