首页 > 解决方案 > 为什么 SCNLights 适用于 Apple 的内置几何图形,而不适用于 OBJ 或 DAE 文件?

问题描述

我整天都在努力让我的 SCNLights 在我的场景模型上工作。我有一个 SCNNode,一个 SCNLight 在游戏中投射一个“.spot”类型的光。

当我使用 Apple 的内置 SCNBox 并点亮对象(图像中的橙色)时,灯光会得到适当的调整。但是,当使用我自己的模型(绿草)时,无论使用何种位掩码,照明都不合适。怎么来的?我需要在我的代码中进行哪些更改,以便我的模型正确响应位掩码?

我已经尝试使用 OBJ、DAE 和 SCN 文件(通过转到编辑器 -> 转换为 SceneKit 文件格式),它们都产生了同样的问题。我首先认为我的位掩码是问题所在,但它们在苹果的原始模型上运行良好,但不是我的。


橙色长方体 草


橙色长方体的代码:

//These few lines sit in a class called "Tile," which contains an SCNNode called "grass"

let grassGeo = SCNBox(width: 0.3, height: 0.6, length: 0.3, chamferRadius: 0)
            grassGeo.materials.first!.diffuse.contents = UIColor.orange
            self.grass.geometry = grassGeo
            self.grass.position = SCNVector3(0, 0, 0)
            self.grass.categoryBitMask = Constants.bitMask.tile
            self.addChildNode(self.grass)

草模型代码

self.grass = SCNNodeFromDAE(filePath: "testgame.scnassets/Models/t_grass/t_grass.dae")
            self.grass.scale = SCNVector3(1, 1, 1)
            self.grass.position = SCNVector3(0, 0, 0)
            self.grass.categoryBitMask = Constants.bitMask.tile
            self.addChildNode(grass)

代码SCNNodeFromDAE

func SCNNodeFromDAE(filePath: String) -> SCNNode {
        guard let s = SCNScene(named: filePath) else { fatalError("Failed to find DAE file.") }
        let n = SCNNode()

        for i in s.rootNode.childNodes {
            n.addChildNode(i as SCNNode)
        }

        return n
    }

更新:根据@Lock 的建议,我发现连接到场景相机的灯正在照亮节点,但是,我使用的是位掩码,这应该会给我想要的结果。我没有正确设置/使用它们吗?这是相机设置代码,我的位掩码结构在一个名为“常量”的文件中:

func setupCamera() {
    cam = SCNNode()
    cam.camera = SCNCamera()
    cam.eulerAngles = c.camAngle
    cam.light = SCNLight()
    cam.light!.type = .omni
    cam.light!.color = UIColor.white
    cam.light!.intensity = c.cam_l_intensity
    cam.light!.categoryBitMask = Constants.bitMask.usr //ONLY light the user
    scn.rootNode.addChildNode(cam)
}

这是位掩码代码:

struct bitMask {
    static let usr:Int = 0x1 << 0 //1
    static let tile:Int = 0x1 << 1 //2
}

标签: iosswiftscenekitcolladascnnode

解决方案


推荐阅读