SCNMaterial с полупрозрачным слоем содержимого выглядит белым

Я пытаюсь создать материал для моего 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-рендеринга я не смог заставить его работать. Что мне здесь не хватает?

Спасибо!

1 ответ

Из яблочной документации по 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]

Это должно привести к чему-то вроде этого:

Другие вопросы по тегам