SCNNodes中的颜色

时间:2016-04-12 21:46:52

标签: ios swift scenekit

我正在尝试将SCNNode的颜色设置为自定义RGBA颜色,但是当我尝试该框时最终会变成白色:

let box = SCNBox(width: 4, height: 1, length: 4, chamferRadius: 0)
    let boxNode = SCNNode(geometry: box)
    myScene.rootNode.addChildNode(boxNode)

    boxNode.castsShadow = true


    box.firstMaterial?.diffuse.contents  = UIColor(red: 30, green: 150, blue: 30, alpha: 1)

这使得盒子变白了但是做这样的事情有效:

box.firstMaterial?.diffuse.contents  = UIColor.greenColor()

如何让盒子具有自定义RGBA颜色?

-Thanks

2 个答案:

答案 0 :(得分:11)

传递给UIColor初始化程序的值必须介于0和1之间。您应该将rgb值除以255.

box.firstMaterial?.diffuse.contents  = UIColor(red: 30.0 / 255.0, green: 150.0 / 255.0, blue: 30.0 / 255.0, alpha: 1)

答案 1 :(得分:0)

为了方便,您还可以添加一个 UIColor 扩展

extension UIColor {

    convenience init(red: UInt, green: UInt, blue: UInt, alpha: UInt = 0xFF) {
        self.init(
            red: CGFloat(red) / 255.0,
            green: CGFloat(green) / 255.0,
            blue: CGFloat(blue) / 255.0,
            alpha: CGFloat(alpha) / 255.0
        )
    }
}

然后你可以使用它如下:

box.firstMaterial?.diffuse.contents = UIColor(red: 30, green: 150, blue: 30, alpha: 1.0)

或者,如果您希望使用十六进制值,请添加下一个 UIColor 扩展

extension UIColor {
    
    convenience init(argb: UInt) {
        self.init(
            red: CGFloat((argb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((argb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(argb & 0x0000FF) / 255.0,
            alpha: CGFloat((argb & 0xFF000000) >> 24) / 255.0
        )
    }
    
}

并按如下方式使用它:

box.firstMaterial?.diffuse.contents = UIColor(argb: 0xFF1B98F5)

快乐编码?‍?