SceneKit/ARKit 地板反射反射CategoryBitMask

问题描述 投票:0回答:1

我需要在

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 的文档指出:

定义其他对象的哪些类别显示反射的遮罩 在地板上。

我做错了什么吗?

swift scenekit arkit
1个回答
0
投票

这对我有用,我将程序地面类别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
    )
© www.soinside.com 2019 - 2024. All rights reserved.