我需要在
scene
中有一个地板,它只会反射一些物体,而不是全部。我用这样的方式创建了一个floor
:
let floor = SCNFloor()
floor.firstMaterial!.lightingModel = .constant
floor.firstMaterial!.diffuse.contents = UIColor.clear
floor.firstMaterial!.writesToDepthBuffer = true
floor.firstMaterial!.readsFromDepthBuffer = true
floor.reflectionCategoryBitMask = 4
反射显示正确,但适用于所有对象。即使我有一个类别位掩码 = 1 的节点。这是为什么? ReflectionCategoryBitMask 的文档指出:
定义其他对象的哪些类别显示反射的遮罩 在地板上。
我做错了什么吗?
这对我有用,我将程序地面类别BitMask 设置为 1 << 2 (4)
let floor = SCNFloor()
floor.reflectivity = 0.3
floor.firstMaterial?.diffuse.contents = UIColor.systemBlue
floor.firstMaterial?.isDoubleSided = false
floor.firstMaterial?.cullMode = .back
floor.firstMaterial?.lightingModel = .lambert
floor.reflectionFalloffStart = 0.0
floor.reflectionFalloffEnd = 0.0
floor.reflectionResolutionScaleFactor = 0.2
floor.firstMaterial?.writesToDepthBuffer = true
floor.firstMaterial?.readsFromDepthBuffer = true
floor.reflectionCategoryBitMask = 1
water = SCNNode.init(
geometry: floor
)