首页 > 解决方案 > 将 GIF 应用于 SCNPlane

问题描述

现在我的 Swift 代码创建了SCNPlane一个名为we.jpg. 我想做的是we.jpgball.gif. material.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]

标签: swiftscenekitgifarkitscnnode

解决方案


您可以轻松地将 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
    }
}

推荐阅读