我目前正在做一个ARKit项目,在那里我想要使实际的相机馈送变暗,这样我的3D场景中的物体就更突出了。
到目前为止,我发现了2种解决方案:
A)手动将CIFilter应用于摄像机帧,并将其设置为SceneKit场景的背景图像,正如在这是如此的帖子中回答的那样,这里的问题是fps坦克非常明显。
B)设置如下背景颜色:
sceneView.scene.background.contents = UIColor(white: 0.0, alpha: 0.2)可悲的是,alpha <1的颜色仍然是不透明的,所以不管我设置了什么alpha,我都看不到相机的任何馈送。
有人能想出一个不同的方法来使摄像机的光线变暗吗?
发布于 2020-04-17 08:42:44
我通过创建一个具有SCNNode几何结构的SCNSphere并使用ARSCNView.pointOfView将其连接到相机上实现了这一效果。

override func viewDidLoad() {
super.viewDidLoad()
let sphereFogNode = makeSphereNode()
arView.pointOfView!.addChildNode(sphereFogNode)
view.addSubview(arView)
}
private static func makeSphereGeom() -> SCNSphere {
let sphere = SCNSphere(radius: 5)
let material = SCNMaterial()
material.diffuse.contents = UIColor(white: 1.0, alpha: 0.7)
material.isDoubleSided = true
sphere.materials = [material]
return sphere
}
private static func makeSphereNode() -> SCNNode {
SCNNode(geometry: makeSphereGeom())
}外球裁剪
这会使摄像机和球体之外的任何东西变暗。命中测试(ARFrame.hitTest)不尊重球面边界。你可以从球体外接收结果。
在你球体之外的事物将通过球体的不透明度被看到。似乎不透明的东西会在球体外变成透明的。

白色部分是球体内的平面,灰色部分是球体外的平面。这架飞机是纯白的,不透明的.我试着使用SCNScene.fog*将SceneKit图形剪辑到球体之外,但是看起来fog并没有屏蔽呈现的内容,只是影响了它的外观。SCNCamera.zFar也不工作,因为它的剪辑是基于Z距离,而不是在相机和目标之间的直线距离。
只要让你的球体足够大,一切都会看上去很好。
https://stackoverflow.com/questions/47679441
复制相似问题