欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于3d實(shí)時(shí)渲染的動畫處理方法和系統(tǒng)的制作方法

文檔序號:6498827閱讀:648來源:國知局
一種基于3d實(shí)時(shí)渲染的動畫處理方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng),所述方法包括:動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi);采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行;當(dāng)在任務(wù)隊(duì)列中添加動畫時(shí),通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱;再將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。其規(guī)避大量復(fù)雜的判斷邏輯;令渲染場景與動畫處理進(jìn)行分離,有利于模塊的復(fù)用,簡化渲染場景的管理中場景節(jié)點(diǎn)的邏輯控制、并使得動畫有了更簡單靈活的動畫延時(shí)開啟管理;又進(jìn)一步地通過Task任務(wù)隊(duì)列管理,消除了多線程間交互帶來的野指針導(dǎo)致系統(tǒng)死機(jī)的隱患。
【專利說明】一種基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及3D動畫【技術(shù)領(lǐng)域】,尤其涉及一種基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng)。
【背景技術(shù)】
[0002]隨著近幾年興起的Iphone、Android智能手機(jī),OpenGL ES開發(fā)繪制的嵌入式3D圖形效果,越來越受到廣大用戶的青睞,3D UI (即3D界面)已然成為智能手機(jī)、智能電視的首選。但在嵌入設(shè)備中不管是3D游戲或者3D UI,都需要實(shí)時(shí)動畫渲染的支持來增加畫面的感染力和真實(shí)感。對于在智能平臺中如何更有效率的、更方便的控制實(shí)時(shí)動畫渲染是一個(gè)瓶頸問題。通常隨著上層應(yīng)用的需求,動畫即需要滿足實(shí)時(shí)渲染控制,又要滿足設(shè)計(jì)效果,動畫的邏輯會越寫越復(fù)雜,最終變得難以擴(kuò)充,難以維護(hù)。
[0003]目前,3D實(shí)時(shí)渲染主要存在以下問題:
(1)在3D渲染的中,動畫的實(shí)現(xiàn)原理是:先依據(jù)動畫算法改變渲染物體位置、大小、旋轉(zhuǎn)或者物體自身的形態(tài),然后再以改變的結(jié)果做為渲染的屬性參數(shù)在下一幀渲染改變后狀態(tài),如果動畫依附在渲染節(jié)點(diǎn)上,該節(jié)點(diǎn)隱藏后,就無法實(shí)現(xiàn)動畫對渲染物體的自身屬性的改變;
(2)動畫掛在每一個(gè)渲染節(jié)點(diǎn),即使動畫任務(wù)結(jié)束后,(實(shí)現(xiàn)這個(gè)動畫的函數(shù))也會每一幀執(zhí)行一次。執(zhí)行函數(shù)時(shí):需要開啟函數(shù)棧、保存現(xiàn)場、出棧,傳遞函數(shù)參數(shù)效率低,在嵌入式緊缺的CPU資源下,無疑是一個(gè)巨大的浪費(fèi);
(3)目前渲染引擎的動畫機(jī)制沒有實(shí)現(xiàn)監(jiān)聽通知的功能,通常3D場景中會有執(zhí)行完一個(gè)動畫,再啟動一個(gè)動畫或者開啟一個(gè)邏輯處理的需求,現(xiàn)行的動畫管理結(jié)構(gòu)中不存在消息分發(fā)的機(jī)制,導(dǎo)致場景管理的邏輯復(fù)雜化;
(4)多線程下動畫的動態(tài)刪除異常。渲染場景需要接受按鍵、鼠標(biāo)等用戶的輸入,一般是事件線程,而與渲染線程相對獨(dú)立,如果在事件線程觸發(fā)了一個(gè)刪除動畫的操作,而在動畫剛被刪除完,渲染線程進(jìn)行渲染,那么野指針就會導(dǎo)致系統(tǒng)的崩潰死機(jī)。
[0004]有鑒于此,現(xiàn)有技術(shù)有待改進(jìn)和提聞。

【發(fā)明內(nèi)容】

[0005]鑒于現(xiàn)有技術(shù)的不足,本發(fā)明目的在于提供一種基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng)。旨在解決現(xiàn)有技術(shù)的書3D實(shí)時(shí)渲染中存在的邏輯復(fù)雜、資源浪費(fèi)等問題。
[0006]本發(fā)明的技術(shù)方案如下:
一種基于3D實(shí)時(shí)渲染的動畫處理方法,其中,包括以下步驟:
Sa、動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi);Sb、動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行;
Sc、當(dāng)在任務(wù)隊(duì)列中添加動畫時(shí),通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱,將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。
[0007]所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其中,在所述步驟Sa之前還包括步驟Sal、將動畫模塊劃分為共有部分和私有部分,其中,所述共有部分包括動畫執(zhí)行算法和動畫類型,所述私有部分包括動畫播放時(shí)間和動畫執(zhí)行狀態(tài)。
[0008]所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其中,所述步驟Sb中Task任務(wù)隊(duì)列管理,按照動畫對象的優(yōu)先級進(jìn)行排序,并進(jìn)一步包括以下步驟:
Sbl、遍歷任務(wù)隊(duì)列進(jìn)行更新;
Sb2、按照需進(jìn)行更新的動畫的更新次數(shù)進(jìn)行若干次迭代,直至更新次數(shù)為O ;
Sb3、判斷動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中。
[0009]所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其中,所述步驟Sa中的共用算法池內(nèi)設(shè)置有關(guān)聯(lián)位置類型的函數(shù)指針和關(guān)聯(lián)漸變類型的函數(shù)指針。
[0010]所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其中,還包括步驟,當(dāng)在任務(wù)隊(duì)列中的動畫的狀態(tài)遷移時(shí),執(zhí)行:
Sd、動畫初始化后添加到活動隊(duì)列中,并向監(jiān)聽集合發(fā)送動畫創(chuàng)建狀態(tài);
Se、事件完成后,將動畫放入動畫刪除隊(duì)列中,并向監(jiān)聽集合發(fā)送動畫刪除狀態(tài),判斷是否要徹底刪除所述動畫;
Sf、接收用戶發(fā)送的刪除指令后,將動畫放入動畫結(jié)束隊(duì)列中,徹底刪除所述動畫。
[0011]所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其中,所述步驟Sb中動畫執(zhí)行過程中,對動畫狀態(tài)按照百分比進(jìn)行執(zhí)行,其具體包括:取實(shí)際連續(xù)η個(gè)渲染幀的時(shí)間差值,再求取n-Ι個(gè)時(shí)間差的平均數(shù)做為實(shí)際動畫每幀的時(shí)間增加量,其中,所述η為大于2的自然數(shù)。
[0012]—種基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其中,包括:
初始化模塊,用于進(jìn)行動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi);
隊(duì)列管理及監(jiān)聽模塊,用于動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽,控制動畫的執(zhí)行;
動畫添加模塊,用于通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱,并將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。
[0013]所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其中,還包括:
動畫劃分模塊,用于將動畫模塊劃分為共有部分和私有部分,其中,所述共有部分包括動畫執(zhí)行算法和動畫類型,所述私有部分包括動畫播放時(shí)間和動畫執(zhí)行狀態(tài)。
[0014]所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其中,所述步驟隊(duì)列管理及監(jiān)聽模塊中Task任務(wù)隊(duì)列管理,按照動畫對象的優(yōu)先級進(jìn)行排序,并進(jìn)一步包括:
遍歷單元,用于遍歷任務(wù)隊(duì)列進(jìn)行更新;
迭代單元,用于按照需進(jìn)行更新的動畫的更新次數(shù)進(jìn)行若干次迭代,直至更新次數(shù)為
O ;
刪除單元,用于判斷動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中。
[0015]所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其中,所述初始化模塊中的共用算法池內(nèi)設(shè)置有關(guān)聯(lián)位置類型的函數(shù)指針和關(guān)聯(lián)漸變類型的函數(shù)指針。
[0016]有益效果:
本申請的基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng),規(guī)避大量復(fù)雜的判斷邏輯;令渲染場景與動畫處理進(jìn)行分離,有利于模塊的復(fù)用,簡化渲染場景的管理中場景節(jié)點(diǎn)的邏輯控制、并使得動畫有了更簡單、靈活的動畫延時(shí)開啟管理;又進(jìn)一步地通過Task任務(wù)隊(duì)列管理,消除了多線程間交互帶來的野指針導(dǎo)致系統(tǒng)死機(jī)的隱患。
【專利附圖】

【附圖說明】
[0017]圖1為本發(fā)明的基于3D實(shí)時(shí)渲染的動畫處理方法的流程圖。
[0018]圖2為圖1中的動畫場景管理器模塊示意圖。
[0019]圖3為圖1中動畫狀態(tài)按照百分比執(zhí)行的示意圖。
[0020]圖4為本發(fā)明的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0021]本發(fā)明提供一種基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng),為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0022]請參閱圖1,其為本發(fā)明的基于3D實(shí)時(shí)渲染的動畫處理方法的流程圖。如圖所示,所述基于3D實(shí)時(shí)渲染的動畫處理方法,包括以下步驟:
51、動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi);
52、動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行;
53、當(dāng)在任務(wù)隊(duì)列中添加動畫時(shí),通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱,并將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。
[0023]下面分別針對上述步驟進(jìn)行具體描述。
[0024]所述步驟SI是將動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi)。具體來說,為了保證動畫管理類的唯一性,從設(shè)計(jì)上繼承單例模式的模板類,本方法并不以全局變量的方式在程序啟動前加載,而是作為場景管理的類成員,在場景管理類初始化時(shí)構(gòu)建,能夠保證在場景管理獲取唯一的動畫管理對象,降低了模塊間的耦合度。初始化過程中,需要注冊動畫的共用執(zhí)行算法,按照動畫的類型,注冊到一個(gè)容器中,即共用算法池。如圖2所示,在本實(shí)施例中,動畫場景管理器內(nèi)包括的動畫管理模塊,在程序啟動前加載,其包括:任務(wù)隊(duì)列管理(下面會介紹到)、私有動畫對象池(包括私有動畫的對象指針)和共用算法池(設(shè)置有關(guān)聯(lián)位置類型的函數(shù)指針和關(guān)聯(lián)漸變類型的函數(shù)指針)。其中,注冊預(yù)定義的動畫類型以及動畫執(zhí)行的函數(shù)指針中,程序員也可以通過接口注冊相應(yīng)的類型和執(zhí)行函數(shù)。在執(zhí)行狀態(tài)下,所有的動畫都會調(diào)用其中的一種,或者不同類型的多種(算法,曲線、直線等)函數(shù)進(jìn)行自我狀態(tài)的更新。
[0025]所述步驟S2是在動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行。其中,采用Task任務(wù)隊(duì)列管理,能夠把將有限狀態(tài)機(jī)的狀態(tài)遷移管理融入動畫執(zhí)行的過程中。具體來說,其可以解決多線程下動畫的動態(tài)刪除異常,非線程安全帶來的異常情況。渲染場景需要接受按鍵、鼠標(biāo)等用戶的輸入,一般是事件線程,而與渲染線程相對獨(dú)立,如果在事件線程觸發(fā)了一個(gè)刪除動畫的操作,而在動畫被剛刪除完,渲染線程即進(jìn)行渲染,那么野指針就會導(dǎo)致系統(tǒng)的崩潰死機(jī);而采用隊(duì)列管理后,我們將事件線程要?jiǎng)h除的動畫,移動到動畫刪除隊(duì)列中,這時(shí)不執(zhí)行真正的delete操作,真正的刪除需要對是否真正要?jiǎng)h除后,移動到結(jié)束隊(duì)列中,完成真正的delete操作,保證了數(shù)據(jù)的正確性,也解決了動畫野指針帶來的系統(tǒng)崩潰的問題(后續(xù)會介紹到)。進(jìn)一步地,嵌入式平臺的資源是非常緊缺的,動畫掛在每一個(gè)渲染節(jié)點(diǎn),即使動畫任務(wù)結(jié)束后,也會每一幀執(zhí)行一次。執(zhí)行函數(shù)時(shí):需要開啟函數(shù)棧、保存現(xiàn)場、出棧,傳遞函數(shù)參數(shù)效率低,而且都是無用,在嵌入式緊缺的CPU資源下,無疑是一個(gè)巨大的浪費(fèi)。通過狀態(tài)隊(duì)列管理機(jī)制,可以將超過生命周期的動畫,移動到動畫刪除隊(duì)列中,進(jìn)行刪除處理,避免函數(shù)的重復(fù)多次執(zhí)行帶來的不必要的資源浪費(fèi)。
[0026]另外,建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,其降低了場景管理的邏輯復(fù)雜化。目前渲染引擎的動畫機(jī)制沒有實(shí)現(xiàn)監(jiān)聽通知的功能,通常3D場景中會有執(zhí)行完一個(gè)動畫,再啟動一個(gè)動畫或者開啟一個(gè)邏輯處理的需求,現(xiàn)行的動畫管理結(jié)構(gòu)中不存在消息分發(fā)的機(jī)制,導(dǎo)致場景管理的邏輯復(fù)雜化。在本發(fā)明中,對動畫的執(zhí)行狀態(tài)需要進(jìn)行監(jiān)聽,從而觸發(fā)不同的行為狀態(tài),例如:焦點(diǎn)切換時(shí),需要啟動一個(gè)位移的動畫,使得焦點(diǎn)框從A點(diǎn)移動到B點(diǎn),到達(dá)B點(diǎn)后,需要啟動一個(gè)圖標(biāo)抖動的動畫,這就需要?jiǎng)赢嫚顟B(tài)隊(duì)列管理來分發(fā)焦點(diǎn)動畫的執(zhí)行狀態(tài),通知控制程序是否啟動圖標(biāo)抖動的動畫。目前的實(shí)現(xiàn)方式為在渲染過程中通過if的條件邏輯判斷,造成了動畫控制邏輯的異常復(fù)雜,可維護(hù)性低,調(diào)試成本高。
[0027]當(dāng)在任務(wù)隊(duì)列中添加動畫時(shí),執(zhí)行步驟S3,其具體包括:通過單件模式獲取動畫管理的對象,創(chuàng)建一個(gè)唯一名稱的動畫對象,關(guān)聯(lián)場景中Node (即節(jié)點(diǎn)),添加到動畫活動隊(duì)列中,此時(shí)用戶也可以將針對此動畫對象的監(jiān)聽者注冊到動畫對象中,該對象在每幀執(zhí)行時(shí)都通知監(jiān)聽者的狀態(tài),以方便用戶實(shí)時(shí)針對動畫的狀態(tài)做出響應(yīng)。另外,當(dāng)在任務(wù)隊(duì)列中的動畫的狀態(tài)遷移時(shí),首先,動畫初始化后添加到活動隊(duì)列中,并向監(jiān)聽集合發(fā)送動畫創(chuàng)建狀態(tài);事件完成后,將動畫放入動畫刪除隊(duì)列中,并向監(jiān)聽集合發(fā)送動畫刪除狀態(tài),判斷是否要徹底刪除所述動畫;接收用戶發(fā)送的刪除指令后,將動畫放入動畫結(jié)束隊(duì)列中,徹底刪除所述動畫。即刪除隊(duì)列中的動畫不執(zhí)行真正的delete操作,真正的刪除需要對是否真正要?jiǎng)h除進(jìn)行判斷為刪除后,移動到結(jié)束隊(duì)列中,做真正的delete操作,保證了數(shù)據(jù)的正確性,也解決了動畫野指針帶來的系統(tǒng)崩潰的問題。
[0028]進(jìn)一步地,所述步驟S2中Task任務(wù)隊(duì)列管理,按照動畫對象的優(yōu)先級進(jìn)行排序,并進(jìn)一步包括以下步驟:
521、遍歷任務(wù)隊(duì)列進(jìn)行更新;
522、按照需進(jìn)行更新的動畫的更新次數(shù)進(jìn)行若干次迭代,直至更新次數(shù)為O;
523、判斷動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中。
[0029]具體來說,在本實(shí)施例中,首先按照動畫對象的優(yōu)先級排序。排序后,優(yōu)先級高的對象先得到執(zhí)行。
[0030]在執(zhí)行過程中,遍歷任務(wù)隊(duì)列進(jìn)行更新,會判斷動畫任務(wù)是否要結(jié)束?即判斷Finish函數(shù)中,判斷是否存在更新次數(shù),存在則進(jìn)行迭代,迭代后,更新次數(shù)減1,進(jìn)一步判斷更新次數(shù)是否小于O,小于O執(zhí)行Finish函數(shù)返回。結(jié)束后繼續(xù)進(jìn)入判斷:動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中,在本實(shí)施例中,通過特殊標(biāo)記位來確定是否進(jìn)行初始化:特殊標(biāo)記位-1則無限循環(huán),重新初始化開始;如果沒有標(biāo)志位則返回將動畫對象移除活動隊(duì)列,放入要?jiǎng)h除隊(duì)列中。在本實(shí)施例中,所述標(biāo)志位采用整形枚舉變量,其標(biāo)識著動畫執(zhí)行循環(huán)類型:LOOP循環(huán)一直播放,Once執(zhí)行一次,還有往復(fù)運(yùn)動等。另外,對一組動畫進(jìn)行串行執(zhí)行,一般的引擎的管理方式為:在邏輯中每幀判斷是否動畫結(jié)束,如果結(jié)束就啟動下一個(gè)動畫。缺陷是,如果串行的動畫比較多,則在邏輯需要寫很多的判斷條件來劃分動畫執(zhí)行狀態(tài)。針對此情況,本發(fā)明設(shè)計(jì)一種方法,其基于人腦的認(rèn)知和動畫添加的先后次序,來進(jìn)行動畫的停止和啟動,避免了邏輯層寫大量的邏輯判斷,減輕了程序開發(fā)與控制的復(fù)雜程度。其中,根據(jù)人腦認(rèn)知,簡單來說就是添加了 A任務(wù)、B任務(wù)、C任務(wù)后,我們便認(rèn)為A任務(wù)執(zhí)行完,執(zhí)行B任務(wù),B任務(wù)完后,再執(zhí)行C任務(wù);是一個(gè)按照添加順序排列的串行執(zhí)行的規(guī)則。具體的更新為:先獲取組內(nèi)所有的動畫對象,并初始化第一播放的索引為O,在更新過程中,增加索引值,當(dāng)索引值大于所有的動畫對象的個(gè)數(shù)時(shí),將整組動畫添加到刪除隊(duì)列中。
[0031]更進(jìn)一步地,在所述步驟SI之前還包括步驟S0、將動畫模塊劃分為共有部分和私有部分,其中,所述共有部分包括動畫執(zhí)行算法和動畫類型,所述私有部分包括動畫播放時(shí)間和動畫執(zhí)行狀態(tài)。因?yàn)?,一般來說同一個(gè)動畫可能會應(yīng)用到多個(gè)節(jié)點(diǎn)上,如果為每個(gè)節(jié)點(diǎn)都創(chuàng)建一個(gè)相同類型的動畫,就非常浪費(fèi)嵌入式系統(tǒng)有限的系統(tǒng)資源。我們設(shè)計(jì)為上述動畫模塊的結(jié)構(gòu)以解決動畫公用的問題。
[0032]更進(jìn)一步地,所述步驟S2中動畫執(zhí)行過程中,對動畫狀態(tài)按照百分比進(jìn)行執(zhí)行,其具體包括:取實(shí)際連續(xù)η個(gè)渲染幀的時(shí)間差值,再求取n-Ι個(gè)時(shí)間差的平均數(shù)做為實(shí)際動畫每幀的時(shí)間增加量,其中,所述η為大于2的自然數(shù)。如圖3所示,在本實(shí)施例中,η為6,渲染幀依次為1000、1003、1008、1012、1020和1025,其時(shí)間差值依次為3、5、4、8、5,如此一來,實(shí)際動畫每幀的時(shí)間增加量即為(3+5+4+8+5)/ 5 =25/5 = 5。
[0033]本發(fā)明還提供了一種基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),如圖4所示,其包括:初始化模塊100、隊(duì)列管理及監(jiān)聽模塊200以及動畫添加模塊300。
[0034]其中,所述初始化模塊100用于進(jìn)行動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi);所述隊(duì)列管理及監(jiān)聽模塊200用于動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行;所述動畫添加模塊300用于通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱,并將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。
[0035]進(jìn)一步地,所述基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng)還包括:動畫劃分模塊,所述動畫劃分模塊用于將動畫模塊劃分為共有部分和私有部分,其中,所述共有部分包括動畫執(zhí)行算法和動畫類型,所述私有部分包括動畫播放時(shí)間和動畫執(zhí)行狀態(tài)。更進(jìn)一步地,所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其中,所述步驟隊(duì)列管理及監(jiān)聽模塊中Task任務(wù)隊(duì)列管理,按照動畫對象的優(yōu)先級進(jìn)行排序,并進(jìn)一步包括:
遍歷單元,用于遍歷任務(wù)隊(duì)列進(jìn)行更新;
迭代單元,用于按照需進(jìn)行更新的動畫的更新次數(shù)進(jìn)行若干次迭代,直至更新次數(shù)為
O ; 刪除單元,用于判斷動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中。
[0036]上述系統(tǒng)中的功能模塊及單元都已經(jīng)在方法步驟中進(jìn)行了詳細(xì)描述,這里就不再 贅述了 O
[0037]本發(fā)明的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng)應(yīng)用于智能電視開發(fā)平臺3D渲染引擎中,解決以往引擎動畫管理的缺陷,提高渲染效率,減少邏輯控制的復(fù)雜度,以及規(guī)避多線程間交互帶來野指針導(dǎo)致系統(tǒng)死機(jī)的隱患。
[0038]下面通過一個(gè)具體的例子來說明其是如何進(jìn)行動畫創(chuàng)建和監(jiān)聽的。首先,通過單件模式獲取動畫管理的對象,創(chuàng)建一個(gè)唯一名稱“focus”的動畫對象,在本實(shí)施例中,所述動畫的類型為直線飛行動畫,插值方式為線性插值,插值公式為:
Value = A *radio + B* (1-radio),公式(I)
,A表示起點(diǎn)位置A, B表示結(jié)束位置;radio表示動畫運(yùn)行的百分比:起點(diǎn)是0%,終點(diǎn)是100%,動畫運(yùn)行期間介于0.0到1.0的值,用于插值計(jì)算。在本實(shí)施例中,動畫時(shí)間為500ms,并將場景中Focus Node關(guān)聯(lián)起來,之后將動畫的指針添加到活動隊(duì)列中,進(jìn)行動畫更新,更新時(shí)調(diào)用公共的線性插值函數(shù),計(jì)算當(dāng)前焦點(diǎn)框的位置,并將計(jì)算出的位置設(shè)置給Focus Node。
[0039]當(dāng)進(jìn)行動畫監(jiān)聽時(shí),添加監(jiān)聽者,監(jiān)聽focus動畫對象的動畫狀態(tài),當(dāng)focus位移動畫對象的狀態(tài)從活動狀態(tài)切換到刪除狀態(tài)時(shí),啟動B點(diǎn)位置focus的放縮動畫,通過value值控制焦點(diǎn)框在B點(diǎn)從小到大變化;動畫的類型為直線飛行動畫,插值方式為線性插值,插值公式為
Value = Al *radio + BI*(1-radio);公式(2)
其中,Al為起點(diǎn)縮放大小,BI為結(jié)束位置的縮放大小,radio含義如同公式(I),同時(shí),設(shè)置迭代標(biāo)識為true。
[0040]綜上所述,本發(fā)明的基于3D實(shí)時(shí)渲染的動畫處理方法和系統(tǒng),其中,所述方法包括:首先,動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi);動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行;當(dāng)在任務(wù)隊(duì)列中添加動畫時(shí),通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱;再將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。其規(guī)避大量復(fù)雜的判斷邏輯;令渲染場景與動畫處理進(jìn)行分離,有利于模塊的復(fù)用,簡化渲染場景的管理中場景節(jié)點(diǎn)的邏輯控制、并使得動畫有了更簡單、靈活的動畫延時(shí)開啟管理;又進(jìn)一步地通過Task任務(wù)隊(duì)列管理,消除了多線程間交互帶來的野指針導(dǎo)致系統(tǒng)死機(jī)的隱患。
[0041]應(yīng)當(dāng)理解的是,本發(fā)明的應(yīng)用不限于上述的舉例,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進(jìn)或變換,所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種基于3D實(shí)時(shí)渲染的動畫處理方法,其特征在于,包括以下步驟: Sa、動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi); Sb、動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽控制動畫的執(zhí)行; Sc、當(dāng)在任務(wù)隊(duì)列中添加動畫時(shí),通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱,將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。
2.根據(jù)權(quán)利要求1所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其特征在于,在所述步驟Sa之前還包括步驟Sal、將動畫模塊劃分為共有部分和私有部分,其中,所述共有部分包括動畫執(zhí)行算法和動畫類型,所述私有部分包括動畫播放時(shí)間和動畫執(zhí)行狀態(tài)。
3.根據(jù)權(quán)利要求1所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其特征在于,所述步驟Sb中Task任務(wù)隊(duì)列管理,按照動畫對象的優(yōu)先級進(jìn)行排序,并進(jìn)一步包括以下步驟: Sbl、遍歷任務(wù)隊(duì)列進(jìn)行更新; Sb2、按照需進(jìn)行更新的動畫的更新次數(shù)進(jìn)行若干次迭代,直至更新次數(shù)為O ; Sb3、判斷動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中。
4.根據(jù)權(quán)利要求1所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其特征在于,所述步驟Sa中的共用算法池內(nèi)設(shè)置有關(guān)聯(lián)位置類型的函數(shù)指針和關(guān)聯(lián)漸變類型的函數(shù)指針。
5.根據(jù)權(quán)利要求1所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其特征在于,還包括步驟,當(dāng)在任務(wù)隊(duì)列中的動畫的狀態(tài)遷`移時(shí),執(zhí)行: Sd、動畫初始化后添加到活動隊(duì)列中,并向監(jiān)聽集合發(fā)送動畫創(chuàng)建狀態(tài); Se、事件完成后,將動畫放入動畫刪除隊(duì)列中,并向監(jiān)聽集合發(fā)送動畫刪除狀態(tài),判斷是否要徹底刪除所述動畫; Sf、接收用戶發(fā)送的刪除指令后,將動畫放入動畫結(jié)束隊(duì)列中,徹底刪除所述動畫。
6.根據(jù)權(quán)利要求1所述的基于3D實(shí)時(shí)渲染的動畫處理方法,其特征在于,所述步驟Sb中動畫執(zhí)行過程中,對動畫狀態(tài)按照百分比進(jìn)行執(zhí)行,其具體包括:取實(shí)際連續(xù)η個(gè)渲染幀的時(shí)間差值,再求取n-Ι個(gè)時(shí)間差的平均數(shù)做為實(shí)際動畫每幀的時(shí)間增加量,其中,所述η為大于2的自然數(shù)。
7.一種基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其特征在于,包括: 初始化模塊,用于進(jìn)行動畫場景初始化,并按照動畫類型,注冊動畫的共用執(zhí)行算法到一共用算法池內(nèi); 隊(duì)列管理及監(jiān)聽模塊,用于動畫執(zhí)行過程中,采用Task任務(wù)隊(duì)列管理,并建立相應(yīng)的監(jiān)聽機(jī)制對動畫進(jìn)行監(jiān)聽,并通過監(jiān)聽,控制動畫的執(zhí)行; 動畫添加模塊,用于通過單件模式獲取所需添加的動畫,并對其設(shè)置一唯一的名稱,并將所述動畫關(guān)聯(lián)場景中的節(jié)點(diǎn)。
8.根據(jù)權(quán)利要求7所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其特征在于,還包括: 動畫劃分模塊,用于將動畫模塊劃分為共有部分和私有部分,其中,所述共有部分包括動畫執(zhí)行算法和動畫類型,所述私有部分包括動畫播放時(shí)間和動畫執(zhí)行狀態(tài)。
9.根據(jù)權(quán)利要求7所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其特征在于,所述步驟隊(duì)列管理及監(jiān)聽模塊中Task任務(wù)隊(duì)列管理,按照動畫對象的優(yōu)先級進(jìn)行排序,并進(jìn)一步包括: 遍歷單元,用于遍歷任務(wù)隊(duì)列進(jìn)行更新; 迭代單元,用于按照需進(jìn)行更新的動畫的更新次數(shù)進(jìn)行若干次迭代,直至更新次數(shù)為O ; 刪除單元,用于判斷動畫是否要重新初始化,若是則重新初始化,否則將動畫移除活動隊(duì)列放入刪除隊(duì)列中。
10.根據(jù)權(quán)利要求7所述的基于3D實(shí)時(shí)渲染的動畫處理系統(tǒng),其特征在于,所述初始化模塊中的共用算法池內(nèi)設(shè)置有關(guān)聯(lián)位置類型的函數(shù)指針和關(guān)聯(lián)漸變類型的函數(shù)指針。
【文檔編號】G06T13/20GK103530898SQ201310003466
【公開日】2014年1月22日 申請日期:2013年1月6日 優(yōu)先權(quán)日:2013年1月6日
【發(fā)明者】趙智寶, 盧偉超 申請人:Tcl集團(tuán)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
留坝县| 临清市| 大宁县| 安平县| 湟中县| 苍山县| 巴林左旗| 民丰县| 正宁县| 来安县| 深水埗区| 温州市| 会昌县| 绿春县| 海林市| 瑞金市| 东明县| 平原县| 巴青县| 长宁县| 佳木斯市| 沙雅县| 云和县| 侯马市| 双牌县| 海晏县| 繁峙县| 仁布县| 阿荣旗| 扎兰屯市| 海伦市| 东乌珠穆沁旗| 凌云县| 曲松县| 营山县| 清丰县| 长顺县| 闽侯县| 克山县| 舞钢市| 利川市|