基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法
【專利摘要】本發(fā)明屬于三維動(dòng)畫【技術(shù)領(lǐng)域】,具體涉及一種基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法。該方法構(gòu)造出動(dòng)畫狀態(tài)機(jī)、綁定狀態(tài)機(jī)、流程控制器三種Mealy型有限狀態(tài)自動(dòng)機(jī),動(dòng)畫狀態(tài)機(jī)對(duì)整個(gè)動(dòng)畫流程的局部動(dòng)畫進(jìn)行控制、綁定狀態(tài)機(jī)對(duì)不同三維模型之間加入父子依賴關(guān)系以實(shí)現(xiàn)模型綁定,流程控制器對(duì)動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)進(jìn)行控制,從而組織整個(gè)動(dòng)畫流程;此外,本發(fā)明構(gòu)造了動(dòng)畫控制器,進(jìn)行局部動(dòng)畫播放控制;還提供了易于編輯的流程描述文件格式以及消息結(jié)構(gòu),在消息路由器的媒介下,通過從流程文件分析器得到流程描述文件的解析結(jié)果,流程控制器可以實(shí)現(xiàn)對(duì)其它狀態(tài)機(jī)控制,從而實(shí)現(xiàn)對(duì)整個(gè)動(dòng)畫流程的組織控制。
【專利說明】基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于三維動(dòng)畫【技術(shù)領(lǐng)域】,具體涉及一種基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法。
【背景技術(shù)】
[0002]三維動(dòng)畫,是隨著計(jì)算機(jī)硬件技術(shù)發(fā)展而產(chǎn)生的一項(xiàng)技術(shù)。三維動(dòng)畫由三維模型的運(yùn)動(dòng)組成,設(shè)計(jì)師設(shè)計(jì)出三維模型構(gòu)成的場(chǎng)景,以及需要運(yùn)動(dòng)的模型,通過定義模型運(yùn)動(dòng)的軌跡實(shí)現(xiàn)三維的動(dòng)畫演示。三維動(dòng)畫一般對(duì)模型運(yùn)動(dòng)軌跡的關(guān)鍵幀進(jìn)行保存,生產(chǎn)特定的動(dòng)畫文件,通過對(duì)這些動(dòng)畫文件進(jìn)行解析構(gòu)建關(guān)鍵幀序列,根據(jù)時(shí)間節(jié)點(diǎn)進(jìn)行插值運(yùn)算就可以得到動(dòng)畫播放中任意節(jié)點(diǎn)的模型運(yùn)動(dòng)狀態(tài)。但當(dāng)動(dòng)畫場(chǎng)景十分大,所涉及的運(yùn)動(dòng)模型十分多時(shí),很難在一個(gè)文件中描述所有的模型的關(guān)鍵幀。這就需要一定的方法對(duì)這些模型運(yùn)動(dòng)進(jìn)行更好的組織,使得整個(gè)動(dòng)畫流程自動(dòng)的順利執(zhí)行。
[0003]Mealy有限狀態(tài)自動(dòng)機(jī),是基于它的當(dāng)前狀態(tài)和輸入生成輸出的有限狀態(tài)自動(dòng)機(jī)。其具體原理見文獻(xiàn) I一Mealy, G.H..A Method for Synthesizing Sequential Circuits.Bell System Tech[J], 1955,34:1045 - 1079。有限狀態(tài)自動(dòng)機(jī)和計(jì)算機(jī)可識(shí)別的正則語言是等價(jià)的,它容易在計(jì)算機(jī)上進(jìn)行實(shí)現(xiàn)。
【發(fā)明內(nèi)容】
[0004](一)要解決的技術(shù)問題
[0005]本發(fā)明要解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的一些局限性,提供一種三維動(dòng)畫的組織控制方法,該方法可通過組織局部動(dòng)畫文件,組織三維模型間的綁定關(guān)系,可方便的進(jìn)行大型場(chǎng)景動(dòng)畫組織,且易于實(shí)現(xiàn)對(duì)動(dòng)畫流程的修改。
[0006](二)技術(shù)方案
[0007]為解決上述技術(shù)問題,本發(fā)明提供一種基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,該方法基于流程控制系統(tǒng)來實(shí)施,所述流程控制系統(tǒng)包括:消息路由器、流程控制器、動(dòng)畫控制器、動(dòng)畫狀態(tài)機(jī)、綁定狀態(tài)機(jī)以及流程文件分析器;所述消息路由器為系統(tǒng)各Mealy有限狀態(tài)自動(dòng)機(jī)所涉及的消息的統(tǒng)一收發(fā)器,其中消息是各Mealy有限狀態(tài)自動(dòng)機(jī)的輸入,每一消息均由消息類型和消息參數(shù)構(gòu)成,消息類型用于決定狀態(tài)轉(zhuǎn)移,消息參數(shù)用于指定輸出操作的行為;所述流程控制器為Mealy有限狀態(tài)自動(dòng)機(jī),用于控制整個(gè)動(dòng)畫過程,其狀態(tài)包括:準(zhǔn)備、運(yùn)行、暫停、終止,其初始狀態(tài)為準(zhǔn)備狀態(tài),其接收消息類型包括:開始、結(jié)束、暫停、繼續(xù)、終止、重置;所述動(dòng)畫控制器用于描述局部動(dòng)畫的動(dòng)畫文件的解析和播放;所述動(dòng)畫狀態(tài)機(jī)為Mealy有限狀態(tài)自動(dòng)機(jī),其利用動(dòng)畫控制器實(shí)現(xiàn)動(dòng)畫控制,其狀態(tài)包括:初始、準(zhǔn)備、運(yùn)行、暫停、停止,其初始狀態(tài)為初始狀態(tài),其接收消息類型包括:讀取、開始、暫定、繼續(xù)、重置、停止;所述動(dòng)畫狀態(tài)機(jī)與動(dòng)畫控制器成組設(shè)置,系統(tǒng)中設(shè)有多組,每一組用于對(duì)某一部分動(dòng)畫進(jìn)行操作,所有組所對(duì)應(yīng)的部分動(dòng)畫組合起來為整體動(dòng)畫;所述綁定狀態(tài)機(jī)為Mealy有限狀態(tài)自動(dòng)機(jī),用于指定特定三維模型的父子關(guān)系和子模型的局部變換,其狀態(tài)包括:準(zhǔn)備、已綁定,其初始狀態(tài)為準(zhǔn)備狀態(tài),其接收消息類型包括:綁定、設(shè)置、重置;所述綁定狀態(tài)機(jī)設(shè)有多個(gè),分別對(duì)不同的部分動(dòng)畫進(jìn)行綁定;所述流程文件分析器用于解析特定的用戶輸入流程文件;
[0008]所述基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其包括如下步驟:
[0009]步驟S1:編寫XML格式的流程描述文件,按層次描述整個(gè)動(dòng)畫流程依次需要播放的動(dòng)畫文件,以及各個(gè)階段模型間的父子綁定關(guān)系,確定流程控制器的工作內(nèi)容;流程描述文件以文字形式描述了由讀取、開始、綁定、設(shè)置四種消息信息構(gòu)成的消息信息樹,消息信息樹是一個(gè)樹狀結(jié)構(gòu),為多叉樹;其中每條消息信息包含消息的編號(hào)、消息的內(nèi)容、消息發(fā)送到目標(biāo)和信息發(fā)送的延時(shí)、消息的內(nèi)容及消息的類型和參數(shù);
[0010]步驟S2:流程文件分析器解析步驟SI中的所述流程描述文件,在內(nèi)存層次構(gòu)造出流程描述文件所描述的消息信息樹;消息信息樹中包含控制動(dòng)畫狀態(tài)機(jī)的讀取和開始消息、以及控制綁定狀態(tài)機(jī)的綁定和設(shè)置消息;流程文件分析器將消息層次樹構(gòu)造完成后傳遞給流程控制器,并指派消息路由器向流程控制器發(fā)送重置消息;
[0011]步驟S3:流程控制器在任何狀態(tài)下接收到步驟S2中的所述重置消息后則轉(zhuǎn)換為準(zhǔn)備狀態(tài),其輸出操作為:令消息路由器向其他狀態(tài)機(jī)發(fā)送重置消息,清空流程控制器自身的運(yùn)行時(shí)表和暫停時(shí)表中的信息;動(dòng)畫狀態(tài)機(jī)在任何狀態(tài)下接收重置消息則轉(zhuǎn)化為初始狀態(tài);綁定狀態(tài)機(jī)在任何狀態(tài)下接收重置消息則轉(zhuǎn)化為準(zhǔn)備狀態(tài);運(yùn)行時(shí)表是一個(gè)線性表,保存發(fā)出而未反饋的消息編號(hào),暫停時(shí)表是一個(gè)隊(duì)列,保存暫停時(shí)反饋的消息編號(hào),二者用于保證流程控制器正確的按消息信息樹逐層向下傳遞消息;
[0012]步驟S4:流程控制器在初始的準(zhǔn)備狀態(tài)下接收開始消息則轉(zhuǎn)化為運(yùn)行狀態(tài);輸出操作為:由步驟S2所述消息樹第一層節(jié)點(diǎn)的內(nèi)容,為消息路由器添加各節(jié)點(diǎn)的消息信息,指派消息路由器在下一幀時(shí)向各個(gè)操作相關(guān)的狀態(tài)機(jī)按指定延時(shí)發(fā)送指定消息,以此開始動(dòng)畫流程;且,流程控制器向運(yùn)行時(shí)表添加所傳遞出的各消息信息的消息編號(hào);
[0013]步驟S5:流程控制器在運(yùn)行狀態(tài)下,不斷按步驟S2所述消息信息樹中的消息信息,指派消息路由器向各動(dòng)畫狀態(tài)機(jī)發(fā)送讀取消息和開始消息、向綁定狀態(tài)機(jī)發(fā)送綁定消息和設(shè)置消息,使得動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)執(zhí)行相應(yīng)的操作,以運(yùn)行整個(gè)動(dòng)畫進(jìn)程;流程控制器向動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)每次傳遞消息后,都將在二者執(zhí)行完相應(yīng)操作后收到響音的結(jié)束消息作為反饋;流程控制器在指派消息路由器發(fā)送各消息時(shí),將消息編號(hào)添加到原有消息參數(shù)中作為新的參數(shù),該消息編號(hào)將在其他狀態(tài)機(jī)向其傳遞結(jié)束消息時(shí)作為消息參數(shù)傳遞,使得流程控制器掌握各狀態(tài)機(jī)執(zhí)行動(dòng)作所對(duì)應(yīng)的發(fā)起消息;動(dòng)畫狀態(tài)機(jī)根據(jù)讀取消息的參數(shù),特定的動(dòng)畫控制器解析相應(yīng)的文件,根據(jù)開始消息的參數(shù)使特定的動(dòng)畫控制器播放相應(yīng)的動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在讀取完成后或動(dòng)畫運(yùn)行結(jié)束后向流程控制器發(fā)送結(jié)束消息,消息參數(shù)描述了使其讀取或開始的消息編號(hào);綁定狀態(tài)機(jī)根據(jù)綁定消息的參數(shù)將一對(duì)特定模型進(jìn)行綁定,根據(jù)設(shè)置的消息參數(shù)設(shè)置子模型在局部坐標(biāo)下的位置和方向;綁定狀態(tài)機(jī)完成綁定操作或設(shè)置操作后向流程控制器發(fā)送結(jié)束消息,消息參數(shù)描述了使其綁定或設(shè)置的消息編號(hào);流程控制器在運(yùn)行狀態(tài)下接收結(jié)束消息則轉(zhuǎn)化為終止?fàn)顟B(tài),其輸出操作為:按消息參數(shù)提供的消息編號(hào),找到其在步驟S2所述消息信息樹中的節(jié)點(diǎn),如果該節(jié)點(diǎn)存在子節(jié)點(diǎn),按所有子節(jié)點(diǎn)內(nèi)容為消息路由器添加消息,按消息參數(shù)提供的消息編號(hào)更新運(yùn)行時(shí)表,判斷運(yùn)行時(shí)表是否為空,若為空則所有消息發(fā)送完畢,則令消息路由器向該流程控制器發(fā)送終止消息;
[0014]步驟6:當(dāng)流程控制器按步驟S5所述處于不斷的運(yùn)行狀態(tài)時(shí),可在用戶控制下通過暫停、繼續(xù)消息對(duì)整個(gè)流程進(jìn)行暫停、繼續(xù)操作;流程控制器在運(yùn)行狀態(tài)下接收暫停消息則轉(zhuǎn)化為暫停狀態(tài);其輸出操作為:令消息路由器向所有狀態(tài)機(jī)發(fā)送暫停消息;流程控制器在暫停狀態(tài)下接收暫停消息則轉(zhuǎn)化為暫停狀態(tài),輸出操作為:保持步驟S5所述的結(jié)束消息相關(guān)的消息編號(hào)至?xí)和r(shí)表,使得返回運(yùn)行狀態(tài)時(shí)控制器工作正常;流程控制器在暫停狀態(tài)下接收繼續(xù)消息則轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:令消息路由器向所有狀態(tài)機(jī)發(fā)送繼續(xù)類型消息,依照暫停時(shí)記錄的消息編號(hào),更新運(yùn)行時(shí)表;
[0015]步驟S7:當(dāng)流程控制器按步驟S5所述處于不斷的運(yùn)行狀態(tài)時(shí),直至收到由該流程控制器指派消息路由發(fā)出的終止消息時(shí),流程控制器在運(yùn)行狀態(tài)或暫停狀態(tài)下接收終止消息則轉(zhuǎn)化為終止?fàn)顟B(tài);所有動(dòng)畫播放完畢;
[0016]步驟S8:用戶通過指派消息路由器向流程控制器發(fā)送重置消息,使所有狀態(tài)機(jī)在步驟S2操作下恢復(fù)到初始狀態(tài),以便用戶重新控制動(dòng)畫播放。
[0017]其中,所述步驟SI及步驟S2中的消息信息樹,在內(nèi)存層次和文件層次所描述的數(shù)據(jù)是完全一致的,樹節(jié)點(diǎn)一一對(duì)應(yīng);該消息信息樹是一個(gè)樹狀結(jié)構(gòu),為多叉樹,具有一個(gè)根節(jié)點(diǎn);根節(jié)點(diǎn)不描述消息信息,根節(jié)點(diǎn)以下各節(jié)點(diǎn)保存一條消息的信息,描述消息的編號(hào),消息的內(nèi)容,消息發(fā)送到目標(biāo)和消息發(fā)送到延時(shí);其中,消息的編號(hào)是用戶指定的節(jié)點(diǎn)唯一的數(shù)據(jù),唯一的標(biāo)記了消息信息樹中的節(jié)點(diǎn);消息內(nèi)容包括消息的類型和消息參數(shù);消息發(fā)送的目標(biāo)是某個(gè)動(dòng)畫狀態(tài)機(jī)或綁定狀態(tài)機(jī);目標(biāo)為動(dòng)畫狀態(tài)機(jī)的節(jié)點(diǎn)對(duì)應(yīng)讀取和開始兩種類型消息,目標(biāo)為綁定狀態(tài)機(jī)的節(jié)點(diǎn)對(duì)應(yīng)綁定和設(shè)置兩種類型消息;其中讀取消息的參數(shù)是相應(yīng)的動(dòng)畫文件地址,綁定消息的參數(shù)是所要綁定的模型,設(shè)置消息的參數(shù)是模型在局部坐標(biāo)系下的位移、尺度和旋轉(zhuǎn)。
[0018]其中,所述步驟SI及步驟S2中的流程描述文件是以XML格式編寫的對(duì)消息信息樹的描述;XML文件由若干標(biāo)簽樹組成,流程描述文件內(nèi)保存了一組消息信息標(biāo)簽,每一條消息信息標(biāo)簽包含五個(gè)子標(biāo)簽,分別描述消息編號(hào)、該消息節(jié)點(diǎn)父節(jié)點(diǎn)的消息編號(hào)、消息目標(biāo)、消息類型、消息參數(shù)、從而表達(dá)出整個(gè)消息信息樹的結(jié)構(gòu)。
[0019]其中,所述步驟S2至步驟S8中消息路由器對(duì)消息收發(fā)的方式為:消息路由器維護(hù)消息信息隊(duì)列,該隊(duì)列初始為空,在每一幀的運(yùn)算中,收集各功能模塊的請(qǐng)求,將其發(fā)送到消息并加入該隊(duì)列,并在下一幀開始時(shí)依次取出并發(fā)送各消息,直至隊(duì)列為空;消息信息隊(duì)列是一個(gè)隊(duì)列結(jié)構(gòu),隊(duì)列每一項(xiàng)保存消息的內(nèi)容、消息發(fā)送到目標(biāo)和消息發(fā)送到延時(shí);幀開始時(shí),消息路由器按先進(jìn)先出方式依次取出并發(fā)送消息隊(duì)列中的各項(xiàng),按項(xiàng)中內(nèi)容,以指定延時(shí)向指定目標(biāo)狀態(tài)機(jī)發(fā)送指定消息;各步驟中各功能模塊指派消息路由器發(fā)送消息,即是向消息信息隊(duì)列中加入相應(yīng)的消息信息,使其在下一幀時(shí)統(tǒng)一發(fā)送;狀態(tài)機(jī)之間、其他模塊與狀態(tài)機(jī)之間通過消息路由器進(jìn)行間接的消息傳遞。
[0020]其中,所述步驟S5中動(dòng)畫控制器對(duì)動(dòng)畫的控制方式為:通過解析動(dòng)畫文件,保存相應(yīng)的模型數(shù)據(jù)和關(guān)鍵幀數(shù)據(jù);播放動(dòng)畫時(shí),根據(jù)時(shí)間節(jié)點(diǎn)進(jìn)行插值運(yùn)算來得到動(dòng)畫播放中任意節(jié)點(diǎn)的模型運(yùn)動(dòng)狀態(tài);其動(dòng)畫播放結(jié)束時(shí)執(zhí)行的特定操作為:令消息路由器向控制該動(dòng)畫控制器的動(dòng)畫狀態(tài)機(jī)發(fā)送停止消息。
[0021]其中,所述步驟S5中動(dòng)畫狀態(tài)機(jī),其具體工作方式為:每個(gè)動(dòng)畫狀態(tài)機(jī)控制唯一的動(dòng)畫控制器;初始狀態(tài)、準(zhǔn)備狀態(tài)或停止?fàn)顟B(tài)下接收步驟S1、步驟S2、步驟S5所述讀取消息后轉(zhuǎn)化狀態(tài)至準(zhǔn)備狀態(tài),輸出操作內(nèi)容為:使動(dòng)畫控制器讀取解析由消息參數(shù)指定的動(dòng)畫文件,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到的消息參數(shù)中的消息編號(hào)作為消息參數(shù);動(dòng)畫狀態(tài)機(jī)在備狀態(tài)下接收步驟S1、步驟S2、步驟S5所述開始消息后轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:使動(dòng)畫控制器播放動(dòng)畫,并保存步驟S5所述接收到的消息參數(shù)中的消息編號(hào);動(dòng)畫狀態(tài)機(jī)在行狀態(tài)下接收步驟S6所述暫停消息后轉(zhuǎn)化為暫停狀態(tài),輸出操作為:使動(dòng)畫控制器暫停動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在停狀態(tài)下接收步驟S6所述繼續(xù)消息后轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:使動(dòng)畫控制器繼續(xù)動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在行狀態(tài)下接收由動(dòng)畫控制器指派發(fā)送的停止消息后轉(zhuǎn)化為停止?fàn)顟B(tài),輸出操作為:令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將保存的消息編號(hào)作為消息參數(shù);動(dòng)畫狀態(tài)機(jī)在備狀態(tài)、運(yùn)行狀態(tài)、暫停狀態(tài)或停止?fàn)顟B(tài)下接收步驟2、8所述重置消息后均轉(zhuǎn)化為初始狀態(tài)。
[0022]其中,所述步驟S5中綁定狀態(tài)機(jī)的具體工作方式為:每個(gè)綁定狀態(tài)機(jī)控制一類模型的綁定操作;其在準(zhǔn)備狀態(tài)、已綁定狀態(tài)下接收步驟S1、步驟S2、步驟S5所述綁定消息后均可轉(zhuǎn)化為已綁定狀態(tài),輸出操作內(nèi)容為:將由消息參數(shù)指定的父子模型綁定,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到的消息參數(shù)中的消息編號(hào)作為消息參數(shù);綁定狀態(tài)機(jī)在綁定狀態(tài)下接收步驟S1、步驟S2、步驟S5所述設(shè)置消息后轉(zhuǎn)化為準(zhǔn)備狀態(tài),輸出操作內(nèi)容為:根據(jù)消息參數(shù)設(shè)置特定子模型的位移、旋轉(zhuǎn)、尺度變換,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到底消息參數(shù)中的消息編號(hào)作為消息參數(shù)。
[0023]其中,所述步驟S3、步驟S4、步驟S5、步驟S6中流程控制器的運(yùn)行時(shí)表的數(shù)據(jù)結(jié)構(gòu)為線性表,暫停時(shí)表的數(shù)據(jù)結(jié)構(gòu)為隊(duì)列;運(yùn)行時(shí)表用于保存已經(jīng)傳遞出、但尚未接收步驟S5所述反饋的消息編號(hào),暫停時(shí)表用于保存在暫停狀態(tài)下接收到反饋的消息編號(hào),每個(gè)編號(hào)對(duì)應(yīng)于消息信息樹的一個(gè)節(jié)點(diǎn);流程控制器對(duì)運(yùn)行時(shí)表具體的維護(hù)方法為:初始時(shí),運(yùn)行時(shí)表為空;當(dāng)流程控制器指派消息路由器向動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)發(fā)送消息時(shí),在運(yùn)行時(shí)表中添加所發(fā)送消息信息的編號(hào);當(dāng)流程控制器接收結(jié)束消息后,所述步驟S5中對(duì)運(yùn)行時(shí)表的具體更新方法為,刪除運(yùn)行時(shí)表中所存編號(hào)與結(jié)束消息的消息編號(hào)一致的項(xiàng),如果該編號(hào)對(duì)應(yīng)節(jié)點(diǎn)擁有子節(jié)點(diǎn),將所有子節(jié)點(diǎn)編號(hào)加入運(yùn)行時(shí)表;當(dāng)流程控制器在暫停狀態(tài)接收繼續(xù)消息后,所述步驟S6中對(duì)運(yùn)行時(shí)表的具體更新方法為,按先進(jìn)先出方式依次取出暫停時(shí)表中的各編號(hào),對(duì)去除的每一編號(hào),刪除運(yùn)行時(shí)表中所存編號(hào)與取出編號(hào)一致的項(xiàng),如果該編號(hào)對(duì)應(yīng)節(jié)點(diǎn)擁有子節(jié)點(diǎn),將所有子節(jié)點(diǎn)編號(hào)加入運(yùn)行時(shí)表;流程控制器對(duì)暫停時(shí)表具體的維護(hù)方法為:暫停時(shí)表初始為空;當(dāng)流程控制器在暫停狀態(tài)接收結(jié)束消息后,所述步驟S6中保存對(duì)應(yīng)消息編號(hào)到暫停時(shí)表的方法為:按隊(duì)列方式加入隊(duì)尾;當(dāng)流程控制器在暫停狀態(tài)接收結(jié)束消息后,所述步驟S6中的保存對(duì)應(yīng)消息編號(hào)到暫停時(shí)表達(dá)方法為:按隊(duì)列方式加入隊(duì)尾;當(dāng)流程控制器在暫停狀態(tài)下接收繼續(xù)消息后,流程控制器將按先進(jìn)先出方法從隊(duì)首依次取出暫停時(shí)表各項(xiàng)并按前述方法更新運(yùn)行時(shí)表,直至?xí)和r(shí)表為空。
[0024](三)有益效果[0025]本發(fā)明技術(shù)方案利用Mealy有限狀態(tài)自動(dòng)機(jī)技術(shù)對(duì)各個(gè)局部三維動(dòng)畫過程進(jìn)行組織控制以完成整個(gè)動(dòng)畫流程,可實(shí)現(xiàn)大場(chǎng)景三維動(dòng)畫的創(chuàng)建,并方便進(jìn)行修改;該方案利用狀態(tài)機(jī)理論構(gòu)造出流程控制器,動(dòng)畫狀態(tài)機(jī),綁定狀態(tài)機(jī)三種Mealy型有限狀態(tài)自動(dòng)機(jī)。動(dòng)畫狀態(tài)機(jī)通過輸出信號(hào)對(duì)整個(gè)動(dòng)畫流程的局部動(dòng)畫進(jìn)行控制,綁定狀態(tài)機(jī)通過輸出信號(hào)對(duì)不同三維模型之間加入父子依賴關(guān)系,以實(shí)現(xiàn)模型綁定,流程控制器通過輸出信號(hào)對(duì)動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)以發(fā)送輸入信號(hào)的形式進(jìn)行控制,從而組織整個(gè)動(dòng)畫流程;此外,本發(fā)明構(gòu)造了動(dòng)畫控制器,進(jìn)行局部動(dòng)畫播放控制,動(dòng)畫狀態(tài)機(jī)通過控制動(dòng)畫控制器實(shí)現(xiàn)局部動(dòng)畫的控制;并且,本發(fā)明還提供了易于編輯的流程描述文件格式,通過構(gòu)造流程文件分析器以解析流程描述文件構(gòu)造出消息信息樹,流程控制器通過維護(hù)消息信息樹,在不同輸入信號(hào)情況下進(jìn)行信號(hào)輸出;另,本發(fā)明設(shè)計(jì)了消息結(jié)構(gòu),各狀態(tài)機(jī)的輸入信號(hào)為不同內(nèi)容的信息,通過消息路由器,消息在不同狀態(tài)機(jī)間傳遞。在消息路由器的媒介下,通過從流程文件分析器得到流程描述文件的解析結(jié)果,流程控制器可以實(shí)現(xiàn)對(duì)其它狀態(tài)機(jī)控制,從而實(shí)現(xiàn)對(duì)整個(gè)動(dòng)畫流程的組織控制。
【專利附圖】
【附圖說明】
[0026]圖1為本發(fā)明技術(shù)方案中流程控制系統(tǒng)的結(jié)構(gòu)和數(shù)據(jù)流示意圖。
[0027]圖2為本發(fā)明流程控制器的狀態(tài)轉(zhuǎn)移示意圖。
[0028]圖3為本發(fā)明動(dòng)畫狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移示意圖。
[0029]圖4為本發(fā)明綁定狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移示意圖。
【具體實(shí)施方式】
[0030]為使本發(fā)明的目的、內(nèi)容、和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步詳細(xì)描述。
[0031]為了解決現(xiàn)有技術(shù)的問題,本發(fā)明技術(shù)方案所提供的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,如圖1所示,概括而言,該方法的實(shí)施涉及消息路由器、流程控制器、動(dòng)畫控制器、動(dòng)畫狀態(tài)機(jī)、綁定狀態(tài)機(jī)以及流程文件分析器。
[0032]1、消息路由器消息發(fā)送方法為:消息路由器維護(hù)消息信息隊(duì)列,該隊(duì)列初始為空,在每一幀的運(yùn)算中,收集各模塊請(qǐng)求發(fā)送到消息加入該隊(duì)列,并在下一幀開始時(shí)依次取出并發(fā)送各消息,直至隊(duì)列為空。消息信息隊(duì)列是一個(gè)隊(duì)列結(jié)構(gòu),隊(duì)列每一項(xiàng)保存消息的內(nèi)容,消息發(fā)送的目標(biāo)和消息發(fā)送的延時(shí)。幀開始時(shí),消息路由器按先進(jìn)先出方式依次取出并發(fā)送消息信息隊(duì)列中各項(xiàng),按項(xiàng)中內(nèi)容,以指定延時(shí)向指定目標(biāo)狀態(tài)機(jī)發(fā)送指定消息。
[0033]2、流程控制器按照消息信息樹的節(jié)點(diǎn)內(nèi)容指派消息路由器發(fā)送消息的方法為:向消息路由器的消息信息隊(duì)列添加消息信息,使消息路由器在下一幀開始時(shí)發(fā)送該消息,添加消息的消息類型、消息目標(biāo)、消息演示為節(jié)點(diǎn)保存的相關(guān)內(nèi)容,消息參數(shù)包括節(jié)點(diǎn)保存的消息參數(shù)以及消息編號(hào)。流程控制器維護(hù)了一個(gè)運(yùn)行時(shí)表,保存了當(dāng)前尚未反饋結(jié)束消息的消息編號(hào)。流程控制器維護(hù)了一個(gè)暫停時(shí)表,保存了暫停時(shí)接受到的結(jié)束消息中消息參數(shù)指定的消息編號(hào)。流程控制器維護(hù)了一個(gè)目標(biāo)總表,表中記錄了消息信息樹中所有消息目標(biāo)的集合,使得向所有動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)發(fā)送消息時(shí)直接按表發(fā)送。如圖2所示,流程控制器,狀態(tài)包括:準(zhǔn)備,運(yùn)行,暫停,終止。其接受消息類型包括:開始,結(jié)束,暫停,繼續(xù),終止,重置。準(zhǔn)備狀態(tài)接受開始消息轉(zhuǎn)化為運(yùn)行狀態(tài),具體的輸出操作為:按照消息信息樹第一層各節(jié)點(diǎn)的內(nèi)容,為消息路由器添加各節(jié)點(diǎn)的消息信息,并將這些消息編號(hào)保存在運(yùn)行時(shí)表中。運(yùn)行狀態(tài)接受結(jié)束消息轉(zhuǎn)化為運(yùn)行狀態(tài),其具體輸出操作為:按消息參數(shù)提供的流程消息編號(hào),將運(yùn)行時(shí)表中該編號(hào)刪除,查找到其在消息信息樹中的節(jié)點(diǎn),如果該節(jié)點(diǎn)存在子節(jié)點(diǎn),按所有子節(jié)點(diǎn)內(nèi)容為消息路由器添加消息,并將所有子節(jié)點(diǎn)的消息編號(hào)添加到運(yùn)行時(shí)表中;如果該節(jié)點(diǎn)不存在子節(jié)點(diǎn),判斷運(yùn)行時(shí)表是否為空,若為空為消息路由添加消息,消息目標(biāo)為流程控制器,消息類型為終止。運(yùn)行狀態(tài)接受暫停消息轉(zhuǎn)化為暫停狀態(tài),其輸出操作為:為消息路由器添加一組消息,消息目標(biāo)為目標(biāo)總表中的各消息目標(biāo),消息類型為暫停。暫停狀態(tài)接受結(jié)束消息轉(zhuǎn)化為暫停狀態(tài),輸出操作為:由消息參數(shù)得到消息編號(hào),在運(yùn)行時(shí)表中刪除該編號(hào),在消息信息樹中找到該編號(hào)對(duì)應(yīng)節(jié)點(diǎn),若存在子節(jié)點(diǎn)將其子節(jié)點(diǎn)編號(hào)添加到暫停時(shí)表中,若無子節(jié)點(diǎn),判斷運(yùn)行時(shí)表是否為空,若為空為消息路由添加消息,消息目標(biāo)為流程控制器,消息類型為終止。暫停狀態(tài)接受繼續(xù)消息轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:為消息路由器添加一組消息,消息目標(biāo)為目標(biāo)總表中的各消息目標(biāo),消息類型為繼續(xù);依照暫停時(shí)表中的各消息編號(hào)在消息信息樹中找到相應(yīng)節(jié)點(diǎn),按節(jié)點(diǎn)內(nèi)容為消息路由器添加消息。運(yùn)行狀態(tài)或暫停狀態(tài)接受終止消息轉(zhuǎn)化為終止?fàn)顟B(tài)。運(yùn)行狀態(tài),暫停狀態(tài)或終止?fàn)顟B(tài)接受重置消息轉(zhuǎn)化為準(zhǔn)備狀態(tài),其輸出操作為:為消息路由器添加一組消息,消息目標(biāo)為目標(biāo)總表中的各消息目標(biāo),消息類型為重置,清空運(yùn)行時(shí)表中的信息。
[0034]3、如圖3所示,動(dòng)畫狀態(tài)機(jī),其狀態(tài)包括:初始,準(zhǔn)備,運(yùn)行,暫停,停止。其接受消息類型包括:讀取,開始,暫定,繼續(xù),重置,停止。狀態(tài)機(jī)的初始時(shí)的狀態(tài)為初始狀態(tài)。初始狀態(tài)、準(zhǔn)備狀態(tài)或停止?fàn)顟B(tài)接受讀取消息轉(zhuǎn)化狀態(tài)至準(zhǔn)備,具體輸出操作內(nèi)容為:使動(dòng)畫控制器讀取解析由消息參數(shù)指定的動(dòng)畫文件,為消息路由器添加消息信息,消息目標(biāo)為流程控制器,消息類型為結(jié)束,消息參數(shù)為所接受消息參數(shù)中的消息編號(hào),延時(shí)為零。準(zhǔn)備狀態(tài)接受開始消息轉(zhuǎn)化為運(yùn)行狀態(tài),具體輸出操作為:使動(dòng)畫控制器播放動(dòng)畫,保存由消息參數(shù)確定的消息編號(hào)。運(yùn)行狀態(tài)接受暫停消息轉(zhuǎn)化為暫停狀態(tài),具體輸出操作為:使動(dòng)畫控制器暫停動(dòng)畫。暫停狀態(tài)接受繼續(xù)消息轉(zhuǎn)化為運(yùn)行狀態(tài),具體輸出操作為:使動(dòng)畫控制器繼續(xù)動(dòng)畫。運(yùn)行狀態(tài)接受停止消息轉(zhuǎn)化為停止?fàn)顟B(tài),具體輸出操作為:為消息路由器添加消息信息,消息目標(biāo)為流程控制器,消息類型為結(jié)束,消息參數(shù)為所保存的消息編號(hào),延時(shí)為零。準(zhǔn)備狀態(tài)、運(yùn)行狀態(tài)、暫停狀態(tài)或停止?fàn)顟B(tài)均接受重置消息轉(zhuǎn)化為準(zhǔn)備狀態(tài)。
[0035]4、如圖4所示,綁定狀態(tài)機(jī),其狀態(tài)包括:準(zhǔn)備,已綁定。接受消息類型包括:綁定,設(shè)置。狀態(tài)機(jī)初始時(shí)的狀態(tài)為準(zhǔn)備狀態(tài)。準(zhǔn)備狀態(tài)、已綁定狀態(tài)均可接受綁定消息轉(zhuǎn)化為已綁定狀態(tài),具體的輸出操作內(nèi)容為:將由消息參數(shù)指定的父子模型綁定,為消息路由器添加消息信息,消息目標(biāo)為流程控制器,消息類型為結(jié)束,消息參數(shù)為所接受消息參數(shù)中的消息編號(hào),延時(shí)為零。已綁定狀態(tài)接受設(shè)置消息轉(zhuǎn)化為準(zhǔn)備狀態(tài),具體的輸出操作內(nèi)容為:根據(jù)消息參數(shù)設(shè)置特定子模型的位移、旋轉(zhuǎn)、尺度變換,為消息路由器添加消息信息,消息目標(biāo)為流程控制器,消息類型為結(jié)束,消息參數(shù)為所接受消息參數(shù)中的消息編號(hào),延時(shí)為零。
[0036]5、用戶對(duì)動(dòng)畫流程的控制方法為:通過修改流程描述文件,確定整個(gè)動(dòng)畫流程過程,通過設(shè)置交互機(jī)制,令消息路由器向流程控制器發(fā)送開始、暫停、繼續(xù)、重置消息,實(shí)現(xiàn)用戶對(duì)整個(gè)動(dòng)畫播放過程的控制。
[0037]詳細(xì)而言,本發(fā)明所提供的一種基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,該方法基于流程控制系統(tǒng)來實(shí)施,所述流程控制系統(tǒng)包括:消息路由器、流程控制器、動(dòng)畫控制器、動(dòng)畫狀態(tài)機(jī)、綁定狀態(tài)機(jī)以及流程文件分析器;所述消息路由器為系統(tǒng)各Mealy有限狀態(tài)自動(dòng)機(jī)所涉及的消息的統(tǒng)一收發(fā)器,其中消息是各Mealy有限狀態(tài)自動(dòng)機(jī)的輸入,每一消息均由消息類型和消息參數(shù)構(gòu)成,消息類型用于決定狀態(tài)轉(zhuǎn)移,消息參數(shù)用于指定輸出操作的行為;所述流程控制器為Mealy有限狀態(tài)自動(dòng)機(jī),用于控制整個(gè)動(dòng)畫過程,其狀態(tài)包括:準(zhǔn)備、運(yùn)行、暫停、終止,其初始狀態(tài)為準(zhǔn)備狀態(tài),其接收消息類型包括:開始、結(jié)束、暫停、繼續(xù)、終止、重置;所述動(dòng)畫控制器用于描述局部動(dòng)畫的動(dòng)畫文件的解析和播放;所述動(dòng)畫狀態(tài)機(jī)為Mealy有限狀態(tài)自動(dòng)機(jī),其利用動(dòng)畫控制器實(shí)現(xiàn)動(dòng)畫控制,其狀態(tài)包括:初始、準(zhǔn)備、運(yùn)行、暫停、停止,其初始狀態(tài)為初始狀態(tài),其接收消息類型包括:讀取、開始、暫定、繼續(xù)、重置、停止;所述動(dòng)畫狀態(tài)機(jī)與動(dòng)畫控制器成組設(shè)置,系統(tǒng)中設(shè)有多組,每一組用于對(duì)某一部分動(dòng)畫進(jìn)行操作,所有組所對(duì)應(yīng)的部分動(dòng)畫組合起來為整體動(dòng)畫;所述綁定狀態(tài)機(jī)為Mealy有限狀態(tài)自動(dòng)機(jī),用于指定特定三維模型的父子關(guān)系和子模型的局部變換,其狀態(tài)包括:準(zhǔn)備、已綁定,其初始狀態(tài)為準(zhǔn)備狀態(tài),其接收消息類型包括:綁定、設(shè)置、重置;所述綁定狀態(tài)機(jī)設(shè)有多個(gè),分別對(duì)不同的部分動(dòng)畫進(jìn)行綁定;所述流程文件分析器用于解析特定的用戶輸入流程文件;
[0038]所述基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其包括如下步驟:
[0039]步驟S1:編寫XML格式的流程描述文件,按層次描述整個(gè)動(dòng)畫流程依次需要播放的動(dòng)畫文件,以及各個(gè)階段模型間的父子綁定關(guān)系,確定流程控制器的工作內(nèi)容;流程描述文件以文字形式描述了由讀取、開始、綁定、設(shè)置四種消息信息構(gòu)成的消息信息樹,消息信息樹是一個(gè)樹狀結(jié)構(gòu),為多叉樹;其中每條消息信息包含消息的編號(hào)、消息的內(nèi)容、消息發(fā)送到目標(biāo)和信息發(fā)送的延時(shí)、消息的內(nèi)容及消息的類型和參數(shù);
[0040]步驟S2:流程文件分析器解析步驟SI中的所述流程描述文件,在內(nèi)存層次構(gòu)造出流程描述文件所描述的消息信息樹;消息信息樹中包含控制動(dòng)畫狀態(tài)機(jī)的讀取和開始消息、以及控制綁定狀態(tài)機(jī)的綁定和設(shè)置消息;流程文件分析器將消息層次樹構(gòu)造完成后傳遞給流程控制器,并指派消息路由器向流程控制器發(fā)送重置消息;
[0041]步驟S3:流程控制器在任何狀態(tài)下接收到步驟S2中的所述重置消息后則轉(zhuǎn)換為準(zhǔn)備狀態(tài),其輸出操作為:令消息路由器向其他狀態(tài)機(jī)發(fā)送重置消息,清空流程控制器自身的運(yùn)行時(shí)表和暫停時(shí)表中的信息;動(dòng)畫狀態(tài)機(jī)在任何狀態(tài)下接收重置消息則轉(zhuǎn)化為初始狀態(tài);綁定狀態(tài)機(jī)在任何狀態(tài)下接收重置消息則轉(zhuǎn)化為準(zhǔn)備狀態(tài);運(yùn)行時(shí)表是一個(gè)線性表,保存發(fā)出而未反饋的消息編號(hào),暫停時(shí)表是一個(gè)隊(duì)列,保存暫停時(shí)反饋的消息編號(hào),二者用于保證流程控制器正確的按消息信息樹逐層向下傳遞消息;
[0042]步驟S4:流程控制器在初始的準(zhǔn)備狀態(tài)下接收開始消息則轉(zhuǎn)化為運(yùn)行狀態(tài);輸出操作為:由步驟S2所述消息樹第一層節(jié)點(diǎn)的內(nèi)容,為消息路由器添加各節(jié)點(diǎn)的消息信息,指派消息路由器在下一幀時(shí)向各個(gè)操作相關(guān)的狀態(tài)機(jī)按指定延時(shí)發(fā)送指定消息,以此開始動(dòng)畫流程;且,流程控制器向運(yùn)行時(shí)表添加所傳遞出的各消息信息的消息編號(hào);
[0043]步驟S5:流程控制器在運(yùn)行狀態(tài)下,不斷按步驟S2所述消息信息樹中的消息信息,指派消息路由器向各動(dòng)畫狀態(tài)機(jī)發(fā)送讀取消息和開始消息、向綁定狀態(tài)機(jī)發(fā)送綁定消息和設(shè)置消息,使得動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)執(zhí)行相應(yīng)的操作,以運(yùn)行整個(gè)動(dòng)畫進(jìn)程;流程控制器向動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)每次傳遞消息后,都將在二者執(zhí)行完相應(yīng)操作后收到響音的結(jié)束消息作為反饋;流程控制器在指派消息路由器發(fā)送各消息時(shí),將消息編號(hào)添加到原有消息參數(shù)中作為新的參數(shù),該消息編號(hào)將在其他狀態(tài)機(jī)向其傳遞結(jié)束消息時(shí)作為消息參數(shù)傳遞,使得流程控制器掌握各狀態(tài)機(jī)執(zhí)行動(dòng)作所對(duì)應(yīng)的發(fā)起消息;動(dòng)畫狀態(tài)機(jī)根據(jù)讀取消息的參數(shù),特定的動(dòng)畫控制器解析相應(yīng)的文件,根據(jù)開始消息的參數(shù)使特定的動(dòng)畫控制器播放相應(yīng)的動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在讀取完成后或動(dòng)畫運(yùn)行結(jié)束后向流程控制器發(fā)送結(jié)束消息,消息參數(shù)描述了使其讀取或開始的消息編號(hào);綁定狀態(tài)機(jī)根據(jù)綁定消息的參數(shù)將一對(duì)特定模型進(jìn)行綁定,根據(jù)設(shè)置的消息參數(shù)設(shè)置子模型在局部坐標(biāo)下的位置和方向;綁定狀態(tài)機(jī)完成綁定操作或設(shè)置操作后向流程控制器發(fā)送結(jié)束消息,消息參數(shù)描述了使其綁定或設(shè)置的消息編號(hào);流程控制器在運(yùn)行狀態(tài)下接收結(jié)束消息則轉(zhuǎn)化為終止?fàn)顟B(tài),其輸出操作為:按消息參數(shù)提供的消息編號(hào),找到其在步驟S2所述消息信息樹中的節(jié)點(diǎn),如果該節(jié)點(diǎn)存在子節(jié)點(diǎn),按所有子節(jié)點(diǎn)內(nèi)容為消息路由器添加消息,按消息參數(shù)提供的消息編號(hào)更新運(yùn)行時(shí)表,判斷運(yùn)行時(shí)表是否為空,若為空則所有消息發(fā)送完畢,則令消息路由器向該流程控制器發(fā)送終止消息;
[0044]步驟6:當(dāng)流程控制器按步驟S5所述處于不斷的運(yùn)行狀態(tài)時(shí),可在用戶控制下通過暫停、繼續(xù)消息對(duì)整個(gè)流程進(jìn)行暫停、繼續(xù)操作;流程控制器在運(yùn)行狀態(tài)下接收暫停消息則轉(zhuǎn)化為暫停狀態(tài);其輸出操作為:令消息路由器向所有狀態(tài)機(jī)發(fā)送暫停消息;流程控制器在暫停狀態(tài)下接收暫停消息則轉(zhuǎn)化為暫停狀態(tài),輸出操作為:保持步驟S5所述的結(jié)束消息相關(guān)的消息編號(hào)至?xí)和r(shí)表,使得返回運(yùn)行狀態(tài)時(shí)控制器工作正常;流程控制器在暫停狀態(tài)下接收繼續(xù)消息則轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:令消息路由器向所有狀態(tài)機(jī)發(fā)送繼續(xù)類型消息,依照暫停時(shí)記錄的消息編號(hào),更新運(yùn)行時(shí)表;
[0045]步驟S7:當(dāng)流程控制器按步驟S5所述處于不斷的運(yùn)行狀態(tài)時(shí),直至收到由該流程控制器指派消息路由發(fā)出的終止消息時(shí),流程控制器在運(yùn)行狀態(tài)或暫停狀態(tài)下接收終止消息則轉(zhuǎn)化為終止?fàn)顟B(tài);所有動(dòng)畫播放完畢;
[0046]步驟S8:用戶通過指派消息路由器向流程控制器發(fā)送重置消息,使所有狀態(tài)機(jī)在步驟S2操作下恢復(fù)到初始狀態(tài),以便用戶重新控制動(dòng)畫播放。
[0047]其中,所述步驟SI及步驟S2中的消息信息樹,在內(nèi)存層次和文件層次所描述的數(shù)據(jù)是完全一致的,樹節(jié)點(diǎn)一一對(duì)應(yīng);該消息信息樹是一個(gè)樹狀結(jié)構(gòu),為多叉樹,具有一個(gè)根節(jié)點(diǎn);根節(jié)點(diǎn)不描述消息信息,根節(jié)點(diǎn)以下各節(jié)點(diǎn)保存一條消息的信息,描述消息的編號(hào),消息的內(nèi)容,消息發(fā)送到目標(biāo)和消息發(fā)送到延時(shí);其中,消息的編號(hào)是用戶指定的節(jié)點(diǎn)唯一的數(shù)據(jù),唯一的標(biāo)記了消息信息樹中的節(jié)點(diǎn);消息內(nèi)容包括消息的類型和消息參數(shù);消息發(fā)送的目標(biāo)是某個(gè)動(dòng)畫狀態(tài)機(jī)或綁定狀態(tài)機(jī);目標(biāo)為動(dòng)畫狀態(tài)機(jī)的節(jié)點(diǎn)對(duì)應(yīng)讀取和開始兩種類型消息,目標(biāo)為綁定狀態(tài)機(jī)的節(jié)點(diǎn)對(duì)應(yīng)綁定和設(shè)置兩種類型消息;其中讀取消息的參數(shù)是相應(yīng)的動(dòng)畫文件地址,綁定消息的參數(shù)是所要綁定的模型,設(shè)置消息的參數(shù)是模型在局部坐標(biāo)系下的位移、尺度和旋轉(zhuǎn)。
[0048]其中,所述步驟SI及步驟S2中的流程描述文件是以XML格式編寫的對(duì)消息信息樹的描述;XML文件由若干標(biāo)簽樹組成,流程描述文件內(nèi)保存了一組消息信息標(biāo)簽,每一條消息信息標(biāo)簽包含五個(gè)子標(biāo)簽,分別描述消息編號(hào)、該消息節(jié)點(diǎn)父節(jié)點(diǎn)的消息編號(hào)、消息目標(biāo)、消息類型、消息參數(shù)、從而表達(dá)出整個(gè)消息信息樹的結(jié)構(gòu)。[0049]其中,所述步驟S2至步驟S8中消息路由器對(duì)消息收發(fā)的方式為:消息路由器維護(hù)消息信息隊(duì)列,該隊(duì)列初始為空,在每一幀的運(yùn)算中,收集各功能模塊的請(qǐng)求,將其發(fā)送到消息并加入該隊(duì)列,并在下一幀開始時(shí)依次取出并發(fā)送各消息,直至隊(duì)列為空;消息信息隊(duì)列是一個(gè)隊(duì)列結(jié)構(gòu),隊(duì)列每一項(xiàng)保存消息的內(nèi)容、消息發(fā)送到目標(biāo)和消息發(fā)送到延時(shí);幀開始時(shí),消息路由器按先進(jìn)先出方式依次取出并發(fā)送消息隊(duì)列中的各項(xiàng),按項(xiàng)中內(nèi)容,以指定延時(shí)向指定目標(biāo)狀態(tài)機(jī)發(fā)送指定消息;各步驟中各功能模塊指派消息路由器發(fā)送消息,即是向消息信息隊(duì)列中加入相應(yīng)的消息信息,使其在下一幀時(shí)統(tǒng)一發(fā)送;狀態(tài)機(jī)之間、其他模塊與狀態(tài)機(jī)之間通過消息路由器進(jìn)行間接的消息傳遞。
[0050]其中,所述步驟S5中動(dòng)畫控制器對(duì)動(dòng)畫的控制方式為:通過解析動(dòng)畫文件,保存相應(yīng)的模型數(shù)據(jù)和關(guān)鍵幀數(shù)據(jù);播放動(dòng)畫時(shí),根據(jù)時(shí)間節(jié)點(diǎn)進(jìn)行插值運(yùn)算來得到動(dòng)畫播放中任意節(jié)點(diǎn)的模型運(yùn)動(dòng)狀態(tài);其動(dòng)畫播放結(jié)束時(shí)執(zhí)行的特定操作為:令消息路由器向控制該動(dòng)畫控制器的動(dòng)畫狀態(tài)機(jī)發(fā)送停止消息。
[0051]其中,所述步驟S5中動(dòng)畫狀態(tài)機(jī),其具體工作方式為:每個(gè)動(dòng)畫狀態(tài)機(jī)控制唯一的動(dòng)畫控制器;初始狀態(tài)、準(zhǔn)備狀態(tài)或停止?fàn)顟B(tài)下接收步驟S1、步驟S2、步驟S5所述讀取消息后轉(zhuǎn)化狀態(tài)至準(zhǔn)備狀態(tài),輸出操作內(nèi)容為:使動(dòng)畫控制器讀取解析由消息參數(shù)指定的動(dòng)畫文件,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到的消息參數(shù)中的消息編號(hào)作為消息參數(shù);動(dòng)畫狀態(tài)機(jī)在備狀態(tài)下接收步驟S1、步驟S2、步驟S5所述開始消息后轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:使動(dòng)畫控制器播放動(dòng)畫,并保存步驟S5所述接收到的消息參數(shù)中的消息編號(hào);動(dòng)畫狀態(tài)機(jī)在行狀態(tài)下接收步驟S6所述暫停消息后轉(zhuǎn)化為暫停狀態(tài),輸出操作為:使動(dòng)畫控制器暫停動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在停狀態(tài)下接收步驟S6所述繼續(xù)消息后轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:使動(dòng)畫控制器繼續(xù)動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在行狀態(tài)下接收由動(dòng)畫控制器指派發(fā)送的停止消息后轉(zhuǎn)化為停止?fàn)顟B(tài),輸出操作為:令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將保存的消息編號(hào)作為消息參數(shù);動(dòng)畫狀態(tài)機(jī)在備狀態(tài)、運(yùn)行狀態(tài)、暫停狀態(tài)或停止?fàn)顟B(tài)下接收步驟2、8所述重置消息后均轉(zhuǎn)化為初始狀態(tài)。
[0052]其中,所述步驟S5中綁定狀態(tài)機(jī)的具體工作方式為:每個(gè)綁定狀態(tài)機(jī)控制一類模型的綁定操作;其在準(zhǔn)備狀態(tài)、已綁定狀態(tài)下接收步驟S1、步驟S2、步驟S5所述綁定消息后均可轉(zhuǎn)化為已綁定狀態(tài),輸出操作內(nèi)容為:將由消息參數(shù)指定的父子模型綁定,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到的消息參數(shù)中的消息編號(hào)作為消息參數(shù);綁定狀態(tài)機(jī)在綁定狀態(tài)下接收步驟S1、步驟S2、步驟S5所述設(shè)置消息后轉(zhuǎn)化為準(zhǔn)備狀態(tài),輸出操作內(nèi)容為:根據(jù)消息參數(shù)設(shè)置特定子模型的位移、旋轉(zhuǎn)、尺度變換,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到底消息參數(shù)中的消息編號(hào)作為消息參數(shù)。
[0053]其中,所述步驟S3、步驟S4、步驟S5、步驟S6中流程控制器的運(yùn)行時(shí)表的數(shù)據(jù)結(jié)構(gòu)為線性表,暫停時(shí)表的數(shù)據(jù)結(jié)構(gòu)為隊(duì)列;運(yùn)行時(shí)表用于保存已經(jīng)傳遞出、但尚未接收步驟S5所述反饋的消息編號(hào),暫停時(shí)表用于保存在暫停狀態(tài)下接收到反饋的消息編號(hào),每個(gè)編號(hào)對(duì)應(yīng)于消息信息樹的一個(gè)節(jié)點(diǎn);流程控制器對(duì)運(yùn)行時(shí)表具體的維護(hù)方法為:初始時(shí),運(yùn)行時(shí)表為空;當(dāng)流程控制器指派消息路由器向動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)發(fā)送消息時(shí),在運(yùn)行時(shí)表中添加所發(fā)送消息信息的編號(hào);當(dāng)流程控制器接收結(jié)束消息后,所述步驟S5中對(duì)運(yùn)行時(shí)表的具體更新方法為,刪除運(yùn)行時(shí)表中所存編號(hào)與結(jié)束消息的消息編號(hào)一致的項(xiàng),如果該編號(hào)對(duì)應(yīng)節(jié)點(diǎn)擁有子節(jié)點(diǎn),將所有子節(jié)點(diǎn)編號(hào)加入運(yùn)行時(shí)表;當(dāng)流程控制器在暫停狀態(tài)接收繼續(xù)消息后,所述步驟S6中對(duì)運(yùn)行時(shí)表的具體更新方法為,按先進(jìn)先出方式依次取出暫停時(shí)表中的各編號(hào),對(duì)去除的每一編號(hào),刪除運(yùn)行時(shí)表中所存編號(hào)與取出編號(hào)一致的項(xiàng),如果該編號(hào)對(duì)應(yīng)節(jié)點(diǎn)擁有子節(jié)點(diǎn),將所有子節(jié)點(diǎn)編號(hào)加入運(yùn)行時(shí)表;流程控制器對(duì)暫停時(shí)表具體的維護(hù)方法為:暫停時(shí)表初始為空;當(dāng)流程控制器在暫停狀態(tài)接收結(jié)束消息后,所述步驟S6中保存對(duì)應(yīng)消息編號(hào)到暫停時(shí)表的方法為:按隊(duì)列方式加入隊(duì)尾;當(dāng)流程控制器在暫停狀態(tài)接收結(jié)束消息后,所述步驟S6中的保存對(duì)應(yīng)消息編號(hào)到暫停時(shí)表達(dá)方法為:按隊(duì)列方式加入隊(duì)尾;當(dāng)流程控制器在暫停狀態(tài)下接收繼續(xù)消息后,流程控制器將按先進(jìn)先出方法從隊(duì)首依次取出暫停時(shí)表各項(xiàng)并按前述方法更新運(yùn)行時(shí)表,直至?xí)和r(shí)表為空。
[0054]綜上,本發(fā)明技術(shù)方案涉及多個(gè)動(dòng)畫的組織控制技術(shù),根據(jù)總的動(dòng)畫流程和局部子動(dòng)畫,利用狀態(tài)機(jī)對(duì)整個(gè)動(dòng)畫行為進(jìn)行組織控制,方便用戶通過修改流程描述文件對(duì)整個(gè)動(dòng)畫流程進(jìn)行修改。該方法可方便用于產(chǎn)品三維動(dòng)畫演示和流程演示。
[0055]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變形,這些改進(jìn)和變形也應(yīng)視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,該方法基于流程控制系統(tǒng)來實(shí)施,所述流程控制系統(tǒng)包括:消息路由器、流程控制器、動(dòng)畫控制器、動(dòng)畫狀態(tài)機(jī)、綁定狀態(tài)機(jī)以及流程文件分析器;所述消息路由器為系統(tǒng)各Mealy有限狀態(tài)自動(dòng)機(jī)所涉及的消息的統(tǒng)一收發(fā)器 ,其中消息是各Mealy有限狀態(tài)自動(dòng)機(jī)的輸入,每一消息均由消息類型和消息參數(shù)構(gòu)成,消息類型用于決定狀態(tài)轉(zhuǎn)移,消息參數(shù)用于指定輸出操作的行為;所述流程控制器為Mealy有限狀態(tài)自動(dòng)機(jī),用于控制整個(gè)動(dòng)畫過程,其狀態(tài)包括:準(zhǔn)備、運(yùn)行、暫停、終止,其初始狀態(tài)為準(zhǔn)備狀態(tài),其接收消息類型包括:開始、結(jié)束、暫停、繼續(xù)、終止、重置;所述動(dòng)畫控制器用于描述局部動(dòng)畫的動(dòng)畫文件的解析和播放;所述動(dòng)畫狀態(tài)機(jī)為Mealy有限狀態(tài)自動(dòng)機(jī),其利用動(dòng)畫控制器實(shí)現(xiàn)動(dòng)畫控制,其狀態(tài)包括:初始、準(zhǔn)備、運(yùn)行、暫停、停止,其初始狀態(tài)為初始狀態(tài),其接收消息類型包括:讀取、開始、暫定、繼續(xù)、重置、停止;所述動(dòng)畫狀態(tài)機(jī)與動(dòng)畫控制器成組設(shè)置,系統(tǒng)中設(shè)有多組,每一組用于對(duì)某一部分動(dòng)畫進(jìn)行操作,所有組所對(duì)應(yīng)的部分動(dòng)畫組合起來為整體動(dòng)畫;所述綁定狀態(tài)機(jī)為Mealy有限狀態(tài)自動(dòng)機(jī),用于指定特定三維模型的父子關(guān)系和子模型的局部變換,其狀態(tài)包括:準(zhǔn)備、已綁定,其初始狀態(tài)為準(zhǔn)備狀態(tài),其接收消息類型包括:綁定、設(shè)置、重置;所述綁定狀態(tài)機(jī)設(shè)有多個(gè),分別對(duì)不同的部分動(dòng)畫進(jìn)行綁定;所述流程文件分析器用于解析特定的用戶輸入流程文件; 所述基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其包括如下步驟: 步驟S1:編寫XML格式的流程描述文件,按層次描述整個(gè)動(dòng)畫流程依次需要播放的動(dòng)畫文件,以及各個(gè)階段模型間的父子綁定關(guān)系,確定流程控制器的工作內(nèi)容;流程描述文件以文字形式描述了由讀取、開始、綁定、設(shè)置四種消息信息構(gòu)成的消息信息樹,消息信息樹是一個(gè)樹狀結(jié)構(gòu),為多叉樹;其中每條消息信息包含消息的編號(hào)、消息的內(nèi)容、消息發(fā)送到目標(biāo)和信息發(fā)送的延時(shí)、消息的內(nèi)容及消息的類型和參數(shù); 步驟S2:流程文件分析器解析步驟SI中的所述流程描述文件,在內(nèi)存層次構(gòu)造出流程描述文件所描述的消息信息樹;消息信息樹中包含控制動(dòng)畫狀態(tài)機(jī)的讀取和開始消息、以及控制綁定狀態(tài)機(jī)的綁定和設(shè)置消息;流程文件分析器將消息層次樹構(gòu)造完成后傳遞給流程控制器,并指派消息路由器向流程控制器發(fā)送重置消息; 步驟S3:流程控制器在任何狀態(tài)下接收到步驟S2中的所述重置消息后則轉(zhuǎn)換為準(zhǔn)備狀態(tài),其輸出操作為:令消息路由器向其他狀態(tài)機(jī)發(fā)送重置消息,清空流程控制器自身的運(yùn)行時(shí)表和暫停時(shí)表中的信息;動(dòng)畫狀態(tài)機(jī)在任何狀態(tài)下接收重置消息則轉(zhuǎn)化為初始狀態(tài);綁定狀態(tài)機(jī)在任何狀態(tài)下接收重置消息則轉(zhuǎn)化為準(zhǔn)備狀態(tài);運(yùn)行時(shí)表是一個(gè)線性表,保存發(fā)出而未反饋的消息編號(hào),暫停時(shí)表是一個(gè)隊(duì)列,保存暫停時(shí)反饋的消息編號(hào),二者用于保證流程控制器正確的按消息信息樹逐層向下傳遞消息; 步驟S4:流程控制器在初始的準(zhǔn)備狀態(tài)下接收開始消息則轉(zhuǎn)化為運(yùn)行狀態(tài);輸出操作為:由步驟S2所述消息樹第一層節(jié)點(diǎn)的內(nèi)容,為消息路由器添加各節(jié)點(diǎn)的消息信息,指派消息路由器在下一幀時(shí)向各個(gè)操作相關(guān)的狀態(tài)機(jī)按指定延時(shí)發(fā)送指定消息,以此開始動(dòng)畫流程;且,流程控制器向運(yùn)行時(shí)表添加所傳遞出的各消息信息的消息編號(hào); 步驟S5:流程控制器在運(yùn)行狀態(tài)下,不斷按步驟S2所述消息信息樹中的消息信息,指派消息路由器向各動(dòng)畫狀態(tài)機(jī)發(fā)送讀取消息和開始消息、向綁定狀態(tài)機(jī)發(fā)送綁定消息和設(shè)置消息,使得動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)執(zhí)行相應(yīng)的操作,以運(yùn)行整個(gè)動(dòng)畫進(jìn)程;流程控制器向動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)每次傳遞消息后,都將在二者執(zhí)行完相應(yīng)操作后收到響音的結(jié)束消息作為反饋;流程控制器在指派消息路由器發(fā)送各消息時(shí),將消息編號(hào)添加到原有消息參數(shù)中作為新的參數(shù),該消息編號(hào)將在其他狀態(tài)機(jī)向其傳遞結(jié)束消息時(shí)作為消息參數(shù)傳遞,使得流程控制器掌握各狀態(tài)機(jī)執(zhí)行動(dòng)作所對(duì)應(yīng)的發(fā)起消息;動(dòng)畫狀態(tài)機(jī)根據(jù)讀取消息的參數(shù),特定的動(dòng)畫控制器解析相應(yīng)的文件,根據(jù)開始消息的參數(shù)使特定的動(dòng)畫控制器播放相應(yīng)的動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在 讀取完成后或動(dòng)畫運(yùn)行結(jié)束后向流程控制器發(fā)送結(jié)束消息,消息參數(shù)描述了使其讀取或開始的消息編號(hào);綁定狀態(tài)機(jī)根據(jù)綁定消息的參數(shù)將一對(duì)特定模型進(jìn)行綁定,根據(jù)設(shè)置的消息參數(shù)設(shè)置子模型在局部坐標(biāo)下的位置和方向;綁定狀態(tài)機(jī)完成綁定操作或設(shè)置操作后向流程控制器發(fā)送結(jié)束消息,消息參數(shù)描述了使其綁定或設(shè)置的消息編號(hào);流程控制器在運(yùn)行狀態(tài)下接收結(jié)束消息則轉(zhuǎn)化為終止?fàn)顟B(tài),其輸出操作為:按消息參數(shù)提供的消息編號(hào),找到其在步驟S2所述消息信息樹中的節(jié)點(diǎn),如果該節(jié)點(diǎn)存在子節(jié)點(diǎn),按所有子節(jié)點(diǎn)內(nèi)容為消息路由器添加消息,按消息參數(shù)提供的消息編號(hào)更新運(yùn)行時(shí)表,判斷運(yùn)行時(shí)表是否為空,若為空則所有消息發(fā)送完畢,則令消息路由器向該流程控制器發(fā)送終止消息; 步驟6:當(dāng)流程控制器按步驟S5所述處于不斷的運(yùn)行狀態(tài)時(shí),可在用戶控制下通過暫停、繼續(xù)消息對(duì)整個(gè)流程進(jìn)行暫停、繼續(xù)操作;流程控制器在運(yùn)行狀態(tài)下接收暫停消息則轉(zhuǎn)化為暫停狀態(tài);其輸出操作為:令消息路由器向所有狀態(tài)機(jī)發(fā)送暫停消息;流程控制器在暫停狀態(tài)下接收暫停消息則轉(zhuǎn)化為暫停狀態(tài),輸出操作為:保持步驟S5所述的結(jié)束消息相關(guān)的消息編號(hào)至?xí)和r(shí)表,使得返回運(yùn)行狀態(tài)時(shí)控制器工作正常;流程控制器在暫停狀態(tài)下接收繼續(xù)消息則轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:令消息路由器向所有狀態(tài)機(jī)發(fā)送繼續(xù)類型消息,依照暫停時(shí)記錄的消息編號(hào),更新運(yùn)行時(shí)表; 步驟S7:當(dāng)流程控制器按步驟S5所述處于不斷的運(yùn)行狀態(tài)時(shí),直至收到由該流程控制器指派消息路由發(fā)出的終止消息時(shí),流程控制器在運(yùn)行狀態(tài)或暫停狀態(tài)下接收終止消息則轉(zhuǎn)化為終止?fàn)顟B(tài);所有動(dòng)畫播放完畢; 步驟S8:用戶通過指派消息路由器向流程控制器發(fā)送重置消息,使所有狀態(tài)機(jī)在步驟S2操作下恢復(fù)到初始狀態(tài),以便用戶重新控制動(dòng)畫播放。
2.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟SI及步驟S2中的消息信息樹,在內(nèi)存層次和文件層次所描述的數(shù)據(jù)是完全一致的,樹節(jié)點(diǎn)一一對(duì)應(yīng);該消息信息樹是一個(gè)樹狀結(jié)構(gòu),為多叉樹,具有一個(gè)根節(jié)點(diǎn);根節(jié)點(diǎn)不描述消息信息,根節(jié)點(diǎn)以下各節(jié)點(diǎn)保存一條消息的信息,描述消息的編號(hào),消息的內(nèi)容,消息發(fā)送到目標(biāo)和消息發(fā)送到延時(shí);其中,消息的編號(hào)是用戶指定的節(jié)點(diǎn)唯一的數(shù)據(jù),唯一的標(biāo)記了消息信息樹中的節(jié)點(diǎn);消息內(nèi)容包括消息的類型和消息參數(shù);消息發(fā)送的目標(biāo)是某個(gè)動(dòng)畫狀態(tài)機(jī)或綁定狀態(tài)機(jī);目標(biāo)為動(dòng)畫狀態(tài)機(jī)的節(jié)點(diǎn)對(duì)應(yīng)讀取和開始兩種類型消息,目標(biāo)為綁定狀態(tài)機(jī)的節(jié)點(diǎn)對(duì)應(yīng)綁定和設(shè)置兩種類型消息;其中讀取消息的參數(shù)是相應(yīng)的動(dòng)畫文件地址,綁定消息的參數(shù)是所要綁定的模型,設(shè)置消息的參數(shù)是模型在局部坐標(biāo)系下的位移、尺度和旋轉(zhuǎn)。
3.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟SI及步驟S2中的流程描述文件是以XML格式編寫的對(duì)消息信息樹的描述;XML文件由若干標(biāo)簽樹組成,流程描述文件內(nèi)保存了一組消息信息標(biāo)簽,每一條消息信息標(biāo)簽包含五個(gè)子標(biāo)簽,分別描述消息編號(hào)、該消息節(jié)點(diǎn)父節(jié)點(diǎn)的消息編號(hào)、消息目標(biāo)、消息類型、消息參數(shù)、從而表達(dá)出整個(gè)消息信息樹的結(jié)構(gòu)。
4.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟S2至步驟S8中消息路由器對(duì)消息收發(fā)的方式為:消息路由器維護(hù)消息信息隊(duì)列,該隊(duì)列初始為空,在每一幀的運(yùn)算中,收集各功能模塊的請(qǐng)求,將其發(fā)送到消息并加入該隊(duì)列,并在下一幀開始時(shí)依次取出并發(fā)送各消息,直至隊(duì)列為空;消息信息隊(duì)列是一個(gè)隊(duì)列結(jié)構(gòu),隊(duì)列每一項(xiàng)保存消息的內(nèi)容、消息發(fā)送到目標(biāo)和消息發(fā)送到延時(shí);幀開始時(shí),消息路由器按先進(jìn)先出方式依次取出并發(fā)送消息隊(duì)列中的各項(xiàng),按項(xiàng)中內(nèi)容,以指定延時(shí)向指定目標(biāo)狀態(tài)機(jī)發(fā)送指定消息;各步驟中各功能模塊指派消息路由器發(fā)送消息,即是向消息信息隊(duì)列中加入相應(yīng)的消息信息,使其在下一幀時(shí)統(tǒng)一發(fā)送;狀態(tài)機(jī)之間、其他模塊與狀態(tài)機(jī)之間通過消息路由器進(jìn)行間接的消息傳遞。
5.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟S5中動(dòng)畫控制器對(duì)動(dòng)畫的控制方式為:通過解析動(dòng)畫文件,保存相應(yīng)的模型數(shù)據(jù)和關(guān)鍵幀數(shù)據(jù);播放動(dòng)畫時(shí),根據(jù)時(shí)間節(jié)點(diǎn)進(jìn)行插值運(yùn)算來得到動(dòng)畫播放中任意節(jié)點(diǎn)的模型運(yùn)動(dòng)狀態(tài);其動(dòng)畫播放結(jié)束時(shí)執(zhí)行的特定操作為:令消息路由器向控制該動(dòng)畫控制器的動(dòng)畫狀態(tài)機(jī)發(fā)送停止消息。
6.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟S5中動(dòng)畫狀態(tài)機(jī),其具體工作方式為:每個(gè)動(dòng)畫狀態(tài)機(jī)控制唯一的動(dòng)畫控制器;初始狀態(tài)、準(zhǔn)備狀態(tài)或停止?fàn)顟B(tài)下接收步驟S1、步驟S2、步驟S5所述讀取消息后轉(zhuǎn)化狀態(tài)至準(zhǔn)備狀態(tài),輸出操作內(nèi)容為:使動(dòng)畫控制器讀取解析由消息參數(shù)指定的動(dòng)畫文件,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到的消息參數(shù)中的消息編號(hào)作為消息參數(shù);動(dòng)畫狀態(tài)機(jī)在備狀態(tài)下接收步驟S1、步驟S2、步驟S5所述開始消息后轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:使動(dòng)畫控制器播放動(dòng)畫,并保存步驟S5所述接收到的消息參數(shù)中的消息編號(hào);動(dòng)畫狀態(tài)機(jī)在行狀態(tài)下接收步驟S6所述暫停消息后轉(zhuǎn)化為暫停狀態(tài),輸出操作為:使動(dòng)畫控制器暫停動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在停狀態(tài)下接收步驟S6所述繼續(xù)消息后轉(zhuǎn)化為運(yùn)行狀態(tài),輸出操作為:使動(dòng)畫控制器繼續(xù)動(dòng)畫;動(dòng)畫狀態(tài)機(jī)在行狀態(tài)下接收由動(dòng)畫控制器指派發(fā)送的停止消息后轉(zhuǎn)化為停止?fàn)顟B(tài),輸出操作為:令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將保存的消息編號(hào)作為消息參數(shù);動(dòng)畫狀態(tài)機(jī)在備狀態(tài)、運(yùn)行狀態(tài)、暫停狀態(tài)或停止?fàn)顟B(tài)下接收步驟2、8所述重置消息后均轉(zhuǎn)化為初始狀態(tài)。
7.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟S5中綁定狀態(tài)機(jī)的具體工作方式為:每個(gè)綁定狀態(tài)機(jī)控制一類模型的綁定操作;其在準(zhǔn)備狀態(tài)、已綁定狀態(tài)下接收步驟S1、步驟S2、步驟S5所述綁定消息后均可轉(zhuǎn)化為已綁定狀態(tài),輸出操作內(nèi)容為:將由消息參數(shù)指定的父子模型綁定,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到的消息參數(shù)中的消息編號(hào)作為消息參數(shù);綁定狀態(tài)機(jī)在綁定狀態(tài)下接收步驟S1、步驟S2、步驟S5所述設(shè)置消息后轉(zhuǎn)化為準(zhǔn)備狀態(tài),輸出操作內(nèi)容為:根據(jù)消息參數(shù)設(shè)置特定子模型的位移、旋轉(zhuǎn)、尺度變換,令消息路由器向流程控制器發(fā)送結(jié)束消息,并按步驟S5所述將接收到底消息參數(shù)中的消息編號(hào)作為消息參數(shù)。
8.如權(quán)利要求1所述的基于Mealy有限狀態(tài)自動(dòng)機(jī)的三維動(dòng)畫流程的組織與控制方法,其特征在于,所述步驟S3、步驟S4、步驟S5、步驟S6中流程控制器的運(yùn)行時(shí)表的數(shù)據(jù)結(jié)構(gòu)為線性表,暫停時(shí)表的數(shù)據(jù)結(jié)構(gòu)為隊(duì)列;運(yùn)行時(shí)表用于保存已經(jīng)傳遞出、但尚未接收步驟S5所述反饋的消息編號(hào),暫停時(shí)表用于保存在暫停狀態(tài)下接收到反饋的消息編號(hào),每個(gè)編號(hào)對(duì)應(yīng)于消息信息樹的一個(gè)節(jié)點(diǎn);流程控制器對(duì)運(yùn)行時(shí)表具體的維護(hù)方法為:初始時(shí),運(yùn)行時(shí)表為空;當(dāng)流程控制器指派消息路由器向動(dòng)畫狀態(tài)機(jī)和綁定狀態(tài)機(jī)發(fā)送消息時(shí),在運(yùn)行時(shí)表中添加所發(fā)送消息信息的編號(hào);當(dāng)流程控制器接收結(jié)束消息后,所述步驟S5中對(duì)運(yùn)行時(shí)表的具體更新方法為,刪除運(yùn)行時(shí)表中所存編號(hào)與結(jié)束消息的消息編號(hào)一致的項(xiàng),如果該編號(hào)對(duì)應(yīng)節(jié)點(diǎn)擁有子節(jié)點(diǎn), 將所有子節(jié)點(diǎn)編號(hào)加入運(yùn)行時(shí)表;當(dāng)流程控制器在暫停狀態(tài)接收繼續(xù)消息后,所述步驟S6中對(duì)運(yùn)行時(shí)表的具體更新方法為,按先進(jìn)先出方式依次取出暫停時(shí)表中的各編號(hào),對(duì)去除的每一編號(hào),刪除運(yùn)行時(shí)表中所存編號(hào)與取出編號(hào)一致的項(xiàng),如果該編號(hào)對(duì)應(yīng)節(jié)點(diǎn)擁有子節(jié)點(diǎn),將所有子節(jié)點(diǎn)編號(hào)加入運(yùn)行時(shí)表;流程控制器對(duì)暫停時(shí)表具體的維護(hù)方法為:暫停時(shí)表初始為空;當(dāng)流程控制器在暫停狀態(tài)接收結(jié)束消息后,所述步驟S6中保存對(duì)應(yīng)消息編號(hào)到暫停時(shí)表的方法為:按隊(duì)列方式加入隊(duì)尾;當(dāng)流程控制器在暫停狀態(tài)接收結(jié)束消息后,所述步驟S6中的保存對(duì)應(yīng)消息編號(hào)到暫停時(shí)表達(dá)方法為:按隊(duì)列方式加入隊(duì)尾;當(dāng)流程控制器在暫停狀態(tài)下接收繼續(xù)消息后,流程控制器將按先進(jìn)先出方法從隊(duì)首依次取出暫停時(shí)表各項(xiàng)并按前述方法更新運(yùn)行時(shí)表,直至?xí)和r(shí)表為空。
【文檔編號(hào)】G06T13/20GK103927777SQ201410133273
【公開日】2014年7月16日 申請(qǐng)日期:2014年4月3日 優(yōu)先權(quán)日:2014年4月3日
【發(fā)明者】魏樂愚, 貝宇紅, 樊新華 申請(qǐng)人:北京星航機(jī)電裝備有限公司