2017-08-09 5 views
0

J'essaie de créer un matériau pour mes SCNBox avec des bordures colorées et des côtés transparents. Voici le code que j'utilise pour créer du matériel:SCNMaterial avec le contenu de la couche semi-transparente apparaît blanc

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] 

Cela fonctionne bien, mais la partie centrale est blanche au lieu de transparente. J'ai essayé beaucoup d'expériences avec la propriété transparente de SCNMaterial et transparentModes, mais avec ma compréhension limitée du rendu 3D je ne pouvais pas le faire fonctionner. Qu'est-ce que j'oublie ici?

Merci!

Répondre

0

De la documentation Pommes sur SCNMaterialProperty.contents:

SceneKit ne peut pas utiliser une couche qui est déjà affichée ailleurs (par exemple, la couche de support d'un objet UIView).

Nous avons donc besoin de créer une nouvelle couche ourself:

// 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] 

Cela devrait se traduire par quelque chose comme ceci:

enter image description here