Swift 将GIF应用于SCNPlane
现在,我的Swift代码创建了一个名为Swift 将GIF应用于SCNPlane,swift,scenekit,gif,arkit,scnnode,Swift,Scenekit,Gif,Arkit,Scnnode,现在,我的Swift代码创建了一个名为we.jpg的图像的SCNPlane。我想做的是用ball.gif替换we.jpg材质.漫反射.内容是UIImage附加到SCNPlane的位置 let planeGeometry = SCNPlane(width: 0.2, height: 0.35) let material = SCNMaterial() material.diffuse.contents = UIImage(named: "we.jpg") planeGeometry.materia
we.jpg
的图像的SCNPlane
。我想做的是用ball.gif
替换we.jpg
<代码>材质.漫反射.内容是UIImage附加到SCNPlane的位置
let planeGeometry = SCNPlane(width: 0.2, height: 0.35)
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "we.jpg")
planeGeometry.materials = [material]
您可以轻松地将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
}
}
您可以轻松地将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处遇到运行时错误!SCNView。错误状态为线程1:信号SIGABRT
let sceneView=self.view as!SCNView
是一种主要用于macOS SceneKit模板的方法。此外,您还可以使用流行的UI方法–使用@IBOutlet
创建您的sceneView
(我已将其放在我的代码中)。为此,只需将故事板中的ARSCNView
或SCNView
与ViewController
中的代码连接即可。此外,您还可以通过编程方式创建sceneView
(所谓的API方法)–它看起来像–var sceneView=ARSCNView()
,然后再创建self.view.addSubview(sceneView)
。我在让sceneView=self.view时遇到运行时错误!SCNView。错误状态为线程1:信号SIGABRTlet sceneView=self.view as!SCNView
是一种主要用于macOS SceneKit模板的方法。此外,您还可以使用流行的UI方法–使用@IBOutlet
创建您的sceneView
(我已将其放在我的代码中)。为此,只需将故事板中的ARSCNView
或SCNView
与ViewController
中的代码连接即可。此外,您还可以通过编程方式创建sceneView
(所谓的API方法)–看起来像–var sceneView=ARSCNView()
,然后再创建self.view.addSubview(sceneView)
。