異或法實(shí)現(xiàn)計(jì)算機(jī)動(dòng)畫(huà)技術(shù)的原理

1.計(jì)算機(jī)動(dòng)畫(huà)的實(shí)現(xiàn)
從圖像移動(dòng)方式上基本可分為三類(lèi):
目標(biāo)對(duì)象移動(dòng)法(背景不動(dòng),改變目標(biāo)位置)
背景移動(dòng)法(目標(biāo)不變,改變背景,呈現(xiàn)動(dòng)畫(huà)效果)
屏幕移動(dòng)法(也稱(chēng)拉屏技術(shù),將屏幕映射到一個(gè)更大的圖像邏輯緩存區(qū)某一位置,通過(guò)改變屏幕位置實(shí)現(xiàn)動(dòng)畫(huà),常用于三維動(dòng)畫(huà))
從處理方式上可分為:逐幀動(dòng)畫(huà)和實(shí)時(shí)動(dòng)畫(huà)
用于實(shí)現(xiàn)動(dòng)畫(huà)的技術(shù)非常多:
重畫(huà)技術(shù)(又分為清屏重畫(huà)法和底色覆蓋法)
清屏重畫(huà)法(圖像的每個(gè)變化都重畫(huà),最直接的逐幀動(dòng)畫(huà))
底色覆蓋法(使用背景色重畫(huà)要清除的部分,使對(duì)象產(chǎn)生移動(dòng)效果,只適用于單色背景,還要解決圖像沖突(兩對(duì)象圖像有重疊部分時(shí),一個(gè)對(duì)象的移動(dòng)導(dǎo)致另一對(duì)象圖像不完整的情況)問(wèn)題)
異或法(對(duì)象圖與背景相異或,并再次與對(duì)象圖相異或即可還原背景,適用于各種背景,而且沒(méi)有圖像沖突)
背景變換法
整體存取法
隱式頁(yè)動(dòng)畫(huà)(兩頁(yè)緩沖區(qū),一頁(yè)用來(lái)顯示,一頁(yè)用來(lái)繪圖,應(yīng)用于復(fù)雜動(dòng)畫(huà))
多頁(yè)面顯示法(現(xiàn)代新型顯示器配置,用于高幀高清晰度的動(dòng)畫(huà))
2.分析異或法實(shí)現(xiàn)動(dòng)畫(huà)的原理
我們不難理解,位運(yùn)算異或有兩個(gè)重要性質(zhì):相同的兩個(gè)數(shù)異或值為0;任意數(shù)和0異或還是它本身。
例如:a^b^b=a,a^b^a=b;1^0^1^1=1^1^1^0
多個(gè)數(shù)異或時(shí),每個(gè)二進(jìn)制位的值只與0和1的個(gè)數(shù)有關(guān),與順序無(wú)關(guān)。
圖像也是用數(shù)據(jù)表示的,采用異或技術(shù)實(shí)現(xiàn)動(dòng)畫(huà)顯示的方法:

編輯
在背景上提取將要顯示對(duì)象的區(qū)域,將該區(qū)域與對(duì)象異或存于緩存區(qū);
將對(duì)象顯示在對(duì)應(yīng)位置;
移動(dòng)對(duì)象時(shí),將前面緩存的數(shù)據(jù)直接在對(duì)象區(qū)域異或,就恢復(fù)背景了,選下個(gè)位置返回第1步,順次執(zhí)行。
圖像沖突的分析:如果在第一個(gè)對(duì)象顯示的位置還要顯示另一個(gè)對(duì)象,是否還能恢復(fù)背景?
為此,我們要分析三個(gè)數(shù)(A,B,C)之間的異或。按前面技術(shù)方案,假定B為背景,A先算,則A^B,后C^A;若是C先移走,很容易理解A被還原了,再移A一定還原B,不會(huì)沖突;若是A先移走,則先得C^(A^B),后得
(C^A)^C^(A^B)=B,仍然不會(huì)沖突,運(yùn)用二進(jìn)制數(shù)值直觀展示這個(gè)運(yùn)算過(guò)程如圖:

編輯
依此類(lèi)推,有n個(gè)對(duì)象時(shí),其值記為P1,P2,P3……Pn,設(shè)背景為P0,同一位置先后顯示n個(gè)對(duì)象,則緩存的值有
P0^P1, P1^P2, ……, P(n-1)^Pn。
移除所有對(duì)象時(shí),Pn^P0^P1^P1^P2^P2^P3^……^P(n-2)^P(n-1)^P(n-1)^Pn
等于Pn^P0^Pn=P0,依舊還原背景。
故,異或法能輕松實(shí)現(xiàn)有多個(gè)移動(dòng)對(duì)象的動(dòng)畫(huà),并恢復(fù)背景,不會(huì)造成圖像沖突。
以上就是異或法實(shí)現(xiàn)動(dòng)畫(huà)的基本原理了,希望對(duì)大家有所幫助。
順帶一提,這個(gè)異或法技術(shù)在我的開(kāi)源項(xiàng)目《ActSpace》中具體實(shí)現(xiàn)了,所有源碼都是從底層實(shí)現(xiàn)的哦!它涵蓋了鍵盤(pán)操作,文件處理,圖形學(xué)技術(shù)(比如圖片顯示、裁剪、動(dòng)畫(huà)實(shí)現(xiàn)等),碰撞檢測(cè)等方面技術(shù)基礎(chǔ),感興趣的話趕緊拿去鉆研學(xué)習(xí)吧。它并不完美,但它一定是我嘔心瀝血打造的,也許我不會(huì)再去完善它,但我相信大家一定能夠把它打磨得更加精致!項(xiàng)目地址:GitHub-ActSpace
思考:上述技術(shù)方案可能會(huì)出現(xiàn)什么樣的問(wèn)題?如果是動(dòng)態(tài)變化的背景,異或法還可行嗎?怎么解決?
歡迎大家評(píng)論區(qū)留言探討!
原文出處:異或法實(shí)現(xiàn)計(jì)算機(jī)動(dòng)畫(huà)技術(shù)的原理 - 自導(dǎo)者薄空的文章 - 知乎 https://zhuanlan.zhihu.com/p/586643693