SceneKit - 提供兩種最常用的將序列幀動(dòng)畫渲染到模型上的方式

本節(jié)學(xué)習(xí)目標(biāo)

提供兩種將序列幀動(dòng)畫渲染到模型上的方式

準(zhǔn)備一組動(dòng)畫圖片跟著教程一起做

image.png

第一種方式 - 使用行為動(dòng)畫(SCNAction)

    // 第一步 - 創(chuàng)建動(dòng)畫組
    var images :[UIImage] = []
    for i in 1...10 {
       let name = "\(i).tiff"
       images.append(UIImage(named:name)!)
    }
    
    // 第二步  給模型節(jié)點(diǎn)添加行為動(dòng)畫
    var count = 0
    let action = SCNAction.customAction(duration: 0.1) { (node, progress) in
       print(progress)
        if progress >= 0.1 {
           count += 1
           node.geometry?.firstMaterial?.diffuse.contents = images[count%9]
        }
    }
   // 讓行為持續(xù) 長(zhǎng)一點(diǎn) 就能實(shí)現(xiàn)連貫的動(dòng)畫
    planeNode.runAction( SCNAction.repeat(action, count: 1000))

tip:為什么 要設(shè)置 progress >= 0.1 而不是 = ,0.1代表我們行為持續(xù)的時(shí)間,看下面的日志

0.00141505610443735
0.0180852222157303
0.0347495143823253
0.0513938077001841
0.0681048463002569
0.084751595329517
0.100000001490116 // 是一個(gè)> 0.1 的值有誤差范圍

第二種方式 - 將uiimageview 渲染到模型上

    // 第一步 創(chuàng)建持有動(dòng)畫的imageView
    let imageView = UIImageView()
    imageView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
    var images :[UIImage] = []
    for i in 1...10 {
     let name = "\(i).tiff"
     images.append(UIImage(named:name)!)
    }
    imageView.animationImages = images
    imageView.animationDuration = 1
    imageView.animationRepeatCount = -1
    imageView.startAnimating()
    // 第二步 渲染imageView 到模型上去
    planeNode.geometry?.firstMaterial?.diffuse.contents = imageView

這個(gè)時(shí)候,你運(yùn)行程序是沒有動(dòng)畫效果的,因?yàn)槟P褪庆o止的,scenekit 不會(huì)對(duì)靜止的模型實(shí)時(shí)渲染,這個(gè)時(shí)候要讓模型渲染imageview 有兩種辦法,第一種就是讓模型小幅度運(yùn)動(dòng),但讓用戶察覺不到,另外一種方式如下

  scnView.isPlaying = true

這個(gè)時(shí)候運(yùn)行程序 序列幀動(dòng)畫已經(jīng)開始執(zhí)行了 效果如下

gif6.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容