【问题标题】:Apply GIF to SCNPlane将 GIF 应用于 SCNPlane
【发布时间】:2020-07-31 13:11:33
【问题描述】:

现在我的 Swift 代码创建了一个 SCNPlane 和一个名为 we.jpg 的图像。我想做的是将we.jpg 替换为ball.gifmaterial.diffuse.contents 是 UIImage 附加到 SCNPlane 的位置。

let planeGeometry = SCNPlane(width: 0.2, height: 0.35)
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "we.jpg")
planeGeometry.materials = [material]

【问题讨论】:

    标签: swift scenekit gif arkit scnnode


    【解决方案1】:

    您可以轻松地将 SCNPlane 的 .jpg 纹理替换为 .gif 纹理。但请记住,在 SceneKit 中不支持动画 GIF 纹理。

    这是一个代码:

    import ARKit
    import SceneKit
    
    class ViewController: UIViewController {
    
        @IBOutlet var sceneView: ARSCNView!   // in case you're using AR app
        //@IBOutlet var sceneView: SCNView!   // in case you're using VR app 
        let planeNode = SCNNode()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let scene = SCNScene()
            sceneView.scene = scene
            sceneView.allowsCameraControl = true
    
            planeNode.geometry = SCNPlane(width: 0.2, height: 0.35)
            planeNode.position = SCNVector3(0, 0,-0.5)
            sceneView.scene?.rootNode.addChildNode(planeNode)
    
            DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {  // 3 sec delay
                let image = UIImage(named: "texture.jpg")
                self.planeNode.geometry?.firstMaterial?.diffuse.contents = image
            }
    
            // Other stuff...
        }
    
        //...and you can replace a texture with a button's click:
    
        @IBAction func replaceTexture(_ sender: UIButton) {
            let image = UIImage(named: "texture.gif")
            planeNode.geometry?.firstMaterial?.diffuse.contents = image
        }
    }
    

    【讨论】:

    • 在 let sceneView = self.view as 时出现运行时错误! SCN 视图。该错误表明它是一个线程 1:signal SIGABRT
    • let sceneView = self.view as! SCNView 是一种主要用于 macOS SceneKit 模板的方法。你也可以使用流行的 UI 方法——使用@IBOutlet 创建你的sceneView(我已经把它放在我的代码中)。为此,只需将情节提要中的ARSCNViewSCNViewViewController 中的代码连接。此外,您可以通过编程方式创建sceneView(所谓的 API 方法)——它看起来像——var sceneView = ARSCNView(),然后是self.view.addSubview(sceneView)
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2021-12-17
    • 2019-06-26
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多