我正在尝试将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
答案 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)
快乐编码??