使用SCNNode作为渲染的"遮罩"?

7
有没有办法使一个节点呈现为“透明”,这样当它被绘制时,场景视图下面的任何视图都会显示在节点通常显示的位置?
例如,假设我们的SCNView后面有一个红色的UIView。以球体为例,你会在场景视图中看到一个圆形的“洞”,红色视图会透过这个洞显示出来。
有什么想法吗?这是否涉及某种着色器?

如果你找到了这个问题的答案,你可以在这里添加答案。这将帮助其他用户。 - Tushar
1个回答

0

剪影效果

假设您在具有默认ship.scn场景的SCNView下方放置了一个红色UIView。要基于SCNNode的alpha通道和redView的.mask实例属性实现剪影效果,请使用以下代码:

import SceneKit

class ViewController : UIViewController {
    
    @IBOutlet var sceneView: SCNView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let redView: UIView = self.view {
            redView.mask = self.sceneView
        }
        if let scene = SCNScene(named: "art.scnassets/ship.scn") {
            self.sceneView.scene = scene
        }
        self.sceneView.backgroundColor = .clear
        self.sceneView.scene?.lightingEnvironment.contents = .none
        self.sceneView.scene?.background.contents = .none
    }
}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接