0

我正在尝试为我SCNBox的彩色边框和透明边创建一种材质。这是我用于创建材料的代码:

class CubeSide: UIView {
    override func draw(_ rect: CGRect) {
        let path = UIBezierPath(rect: rect)

        UIColor.yellow.setStroke()
        path.stroke()
    }
}

let sideView = CubeSide(frame: rect)
sideView.backgroundColor = UIColor.clear

let material = SCNMaterial()
material.diffuse.contents = sideView

material.isDoubleSided = true
box.materials = [material]

它工作正常,但中心部分是白色而不是透明的。我已经用 SCNMaterial 的透明属性和 transparentModes 尝试了很多实验,但是由于我对 3D 渲染的理解有限,我无法让它工作。我在这里想念什么?

谢谢!

4

1 回答 1

1

来自 Apples 文档SCNMaterialProperty.contents

SceneKit 不能使用已经在其他地方显示的层(例如,UIView 对象的支持层)。

所以我们需要自己创建一个新层:

// Create the geometry
let box = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)

// Create the layer
let layer = CALayer()
layer.frame = CGRect(x: 0, y: 0, width: 1000, height: 1000)
layer.borderColor = UIColor.red.cgColor
layer.borderWidth = 10

// Create a material from the layer and assign it
let material = SCNMaterial()
material.diffuse.contents = layer
material.isDoubleSided = true
box.materials = [material]

这应该会导致这样的结果:

在此处输入图像描述

于 2017-08-13T13:35:57.693 回答