趙 謙,張新家,萬(wàn) 苗
(西北工業(yè)大學(xué) 自動(dòng)化學(xué)院,陜西 西安 710129)
伴隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,虛擬現(xiàn)實(shí)技術(shù)必然會(huì)進(jìn)入社會(huì)的各個(gè)領(lǐng)域。虛擬現(xiàn)實(shí)是多種技術(shù)的綜合,包括三維計(jì)算機(jī)圖形技術(shù),廣角立體顯示技術(shù),對(duì)人肢體的跟蹤技術(shù),以及觸覺(jué)/力量反饋、立體聲、網(wǎng)絡(luò)傳輸、語(yǔ)音輸入輸出技術(shù)等。三維計(jì)算機(jī)圖形技術(shù)為虛擬現(xiàn)實(shí)技術(shù)提供三維實(shí)體建模,環(huán)境模擬等基本的技術(shù)支撐?,F(xiàn)有的建模技術(shù)已經(jīng)能夠逼真模擬現(xiàn)實(shí)中的物體并且得到了廣泛的應(yīng)用。系列電影《生化危機(jī)》在人體建模方面的成功就是建模技術(shù)成熟的一種客觀寫(xiě)照。建立完備的模型之后,還要讓模型能夠動(dòng)起來(lái)[1]。Xsens moven慣性動(dòng)作捕捉系統(tǒng),能夠?qū)崟r(shí)捕捉人體六自由度的動(dòng)作數(shù)據(jù),為模型的運(yùn)動(dòng)提供接近真實(shí)的動(dòng)作效果[2-3]。然而,這些系統(tǒng)不僅將實(shí)體建模和動(dòng)作信息分開(kāi)考慮,而且將模型孤立了起來(lái)。伴隨著虛擬現(xiàn)實(shí)技術(shù)研究的深入和應(yīng)用的推廣,越來(lái)越復(fù)雜的系統(tǒng)必然會(huì)在虛擬現(xiàn)實(shí)環(huán)境下實(shí)驗(yàn)和測(cè)試,現(xiàn)有的建模方法在應(yīng)用到這些多對(duì)象復(fù)雜聯(lián)系的系統(tǒng)中顯然不能得到滿(mǎn)意的效果。針對(duì)這類(lèi)問(wèn)題,本文做一些探討。
復(fù)雜系統(tǒng)包含的實(shí)體對(duì)象可能不止一個(gè),而且對(duì)象間也存在各類(lèi)關(guān)系。我們將一個(gè)系統(tǒng)定義為一個(gè)過(guò)程。一個(gè)過(guò)程最基本的三個(gè)要素便是實(shí)體對(duì)象,關(guān)系以及行為[5]。所謂實(shí)體對(duì)象就是過(guò)程的參與者;關(guān)系是指實(shí)體對(duì)象之間的約束條件;行為是指實(shí)體對(duì)象的動(dòng)態(tài)特征。
我們給過(guò)程一個(gè)廣泛的定義,凡是滿(mǎn)足下面約束條件的事件,我們都可以定義為一個(gè)過(guò)程。諸如動(dòng)態(tài)場(chǎng)景,物理碰撞試驗(yàn)等等都可以定義為一個(gè)過(guò)程。
1)過(guò)程必須要有實(shí)體對(duì)象參與。一個(gè)過(guò)程可以沒(méi)有關(guān)系,但是不能沒(méi)有實(shí)體對(duì)象。
2)關(guān)系是實(shí)體對(duì)象與實(shí)體對(duì)象之間的聯(lián)系。
3)行為本身是實(shí)體對(duì)象的一個(gè)屬性,不能脫離實(shí)體對(duì)象而存在。
在1.1中我們給過(guò)程一個(gè)定義,這個(gè)定義給出過(guò)程一個(gè)必要的條件,即一個(gè)過(guò)程至少有一個(gè)實(shí)體對(duì)象。然而,現(xiàn)實(shí)中我們遇到的情況可能要復(fù)雜得多。一個(gè)復(fù)雜系統(tǒng)或復(fù)雜過(guò)程可能包含多類(lèi)實(shí)體對(duì)象,錯(cuò)綜復(fù)雜的關(guān)系,多約束的運(yùn)動(dòng)特征。一個(gè)典型的例子就是虛擬戰(zhàn)場(chǎng)環(huán)境[6]。就實(shí)體對(duì)象而言,它包括地形,作戰(zhàn)工具,參戰(zhàn)人員,建筑等幾類(lèi),每類(lèi)中又包含多種實(shí)體對(duì)象,比如地形就有山地,河川,草地,森林等多種情況;這些對(duì)象之間相互的關(guān)系則更為復(fù)雜,比如一輛坦克要受到地形的約束,與其他物體碰撞等。顯然對(duì)于這種情況,我們?nèi)绻皇强紤]單個(gè)對(duì)象而不將其放在環(huán)境中,仿真效果顯然不能令人滿(mǎn)意。
針對(duì)多對(duì)象復(fù)雜關(guān)系的情況,僅僅孤立的建模方法不能滿(mǎn)足要求,還有另外一種情況也不能不考慮。在工程機(jī)械仿真應(yīng)用[7]中,常常會(huì)碰到大型的機(jī)械或部件,這些器械由一些簡(jiǎn)單的零件裝配成,這些零件不僅具備自己的屬性而且零件間可以進(jìn)行相對(duì)運(yùn)動(dòng),如果在仿真時(shí),我們只是一次性完成仿真,那么對(duì)于零部件之間的關(guān)系就不能表達(dá),這顯然違背了仿真設(shè)計(jì)的初衷。
特別提出的是,所謂的復(fù)雜過(guò)程和復(fù)合對(duì)象只是過(guò)程定義框架內(nèi)的兩種情況(下文會(huì)給你這兩種情況的區(qū)別),它們都可以定義為一個(gè)過(guò)程。
我們將一個(gè)復(fù)雜過(guò)程依據(jù)空間,邏輯等關(guān)系,劃分為若干個(gè)子過(guò)程。當(dāng)然需要說(shuō)明的是:第一:無(wú)論如何劃分,每個(gè)子過(guò)程必須滿(mǎn)足上面的約束性條件;第二:劃分過(guò)程的可行性。為了描述劃分的可行性,我們使用兩個(gè)定性的要求來(lái)限制,即獨(dú)立性和協(xié)調(diào)性。所謂獨(dú)立性,就是子過(guò)程應(yīng)當(dāng)具有自身的屬性,在離開(kāi)上一層過(guò)程時(shí)可以獨(dú)立存在;協(xié)調(diào)性是指每個(gè)子過(guò)程應(yīng)該具備一定的能力,這個(gè)能力使得其能夠參與上一層過(guò)程的行為。
復(fù)雜過(guò)程總可以劃分為若干個(gè)子過(guò)程,最終的結(jié)果是子過(guò)程只包含一個(gè)實(shí)體對(duì)象。實(shí)體對(duì)象應(yīng)具備自己的完備屬性,并且能夠以關(guān)系的要求與其他實(shí)體對(duì)象相互聯(lián)系。如圖一所示[8]。我們將帶有運(yùn)動(dòng)特性的實(shí)體對(duì)象以關(guān)系為媒介組織起來(lái),那么一個(gè)復(fù)雜過(guò)程最終會(huì)形成一種“網(wǎng)”的結(jié)構(gòu),網(wǎng)的每個(gè)結(jié)點(diǎn)是一個(gè)簡(jiǎn)單的子過(guò)程。這種形式,不僅使得每個(gè)“結(jié)點(diǎn)”有很強(qiáng)的獨(dú)立性,而且在實(shí)現(xiàn)時(shí),具有很強(qiáng)的拓展性和靈活性。
圖1 子過(guò)程與子過(guò)程之間的關(guān)系Fig.1 The relationship between subprocesses
子過(guò)程和子過(guò)程之間以關(guān)系的形式相互關(guān)聯(lián),這個(gè)關(guān)聯(lián)作用的結(jié)果以行為的形式表現(xiàn)在實(shí)體對(duì)象上。我們將研究的對(duì)象定義為主體,與之有聯(lián)系的對(duì)象定義為客體。那么主體在具備基本屬性的前提下,應(yīng)該擁有記錄與它直接相關(guān)的客體的關(guān)系以及這些關(guān)系對(duì)于主體行為作用結(jié)果的能力。我們?yōu)閷?shí)體對(duì)象建立下面的結(jié)構(gòu)[9]:
object{
對(duì)象ID;
頂點(diǎn)信息;
材質(zhì)信息;
紋理信息;
關(guān)系表;
行為信息;
自定義(擴(kuò)展);
}
對(duì)象ID表征了對(duì)象的身份。將頂點(diǎn)信息,材質(zhì)信息和紋理信息稱(chēng)為對(duì)象的繪制信息,關(guān)系表稱(chēng)為動(dòng)態(tài)信息。關(guān)系表表征了主體對(duì)象與直接相關(guān)的客體對(duì)象的聯(lián)系,這個(gè)聯(lián)系包含客體對(duì)于主體的約束性條件,約束性條件可能是復(fù)雜的方程,也可能是一個(gè)條件限制。行為信息直接表達(dá)了客體對(duì)象集合對(duì)于主體對(duì)象作用的結(jié)果,這個(gè)結(jié)果是客體對(duì)象約束性條件的疊加。
需要特別指出的是,行為信息記錄了行為結(jié)果,而對(duì)于各種約束性條件的控制卻單獨(dú)完成。如圖二所示。我們必須考慮主體對(duì)象的材質(zhì)等屬性,因?yàn)閬?lái)自客體的影響施加于主體,受到材質(zhì)等屬性的制約。一種特殊的情況是,某個(gè)主體對(duì)象和客體對(duì)象為同一實(shí)體對(duì)象,此時(shí)的約束條件是實(shí)體對(duì)象本身具備的一種“能力”。提供這些能力對(duì)于快速實(shí)現(xiàn)動(dòng)態(tài)化表達(dá)有重要意義,而且對(duì)于實(shí)現(xiàn)交互式操作也提供了可能[10]。
圖2 行為信息的獲得Fig.2 Acquire the movement information
在1.2節(jié)中,我們列舉了兩種比較復(fù)雜的情況,這兩種情況都可以定義為一個(gè)過(guò)程,也可以同時(shí)出現(xiàn)在一個(gè)復(fù)雜系統(tǒng)中,然而他們?cè)趯?shí)現(xiàn)時(shí)卻有本質(zhì)的不同。首先,我們將一個(gè)過(guò)程劃分為多個(gè)子過(guò)程,最終的結(jié)果是第N層的子過(guò)程只包含一個(gè)實(shí)體對(duì)象。這里會(huì)出現(xiàn)兩種情況,當(dāng)N-1層子過(guò)程包含多個(gè)實(shí)體對(duì)象時(shí),那么向上整個(gè)劃分過(guò)程定義為一個(gè)復(fù)雜過(guò)程的過(guò)程建模實(shí)現(xiàn);當(dāng)?shù)贜-1層包含多個(gè)實(shí)體對(duì)象,第N層子過(guò)程只包含一個(gè)實(shí)體對(duì)象,第N+M層也只有一個(gè)實(shí)體對(duì)象時(shí),那么第N層向下整個(gè)劃分過(guò)程稱(chēng)為復(fù)合對(duì)象的過(guò)程建模實(shí)現(xiàn)。由此看出,復(fù)雜過(guò)程實(shí)現(xiàn)是針對(duì)一個(gè)多實(shí)體對(duì)象的建模實(shí)現(xiàn),而復(fù)合對(duì)象實(shí)現(xiàn)是針對(duì)一個(gè)多部件對(duì)象的“拆卸”的實(shí)現(xiàn)過(guò)程。
針對(duì)復(fù)雜過(guò)程建模方法的實(shí)質(zhì)是將一個(gè)動(dòng)態(tài)的場(chǎng)景,拆分為幾個(gè)實(shí)體對(duì)象的運(yùn)動(dòng),然后將這些實(shí)體對(duì)象再融入一個(gè)畫(huà)面中,實(shí)現(xiàn)對(duì)于動(dòng)態(tài)場(chǎng)景的近似。在計(jì)算機(jī)圖形學(xué)中,場(chǎng)景的動(dòng)態(tài)特性是通過(guò)每個(gè)靜態(tài)場(chǎng)景或幀的微小變化的快速切換近似模擬的。因此在建模時(shí)我們關(guān)心的并不是實(shí)體對(duì)象為什么變化,而是在下一幀中圖形的行為信息。這需要一個(gè)控制器為我們準(zhǔn)備這些變化信息。
通過(guò)上面的內(nèi)容,我們可以總結(jié)這個(gè)控制器的功能。首先,這個(gè)控制器要返回行為信息;其次,能夠訪問(wèn)關(guān)系表中的實(shí)體對(duì)象本身具備的運(yùn)動(dòng)能力和它受到的約束條件;最后,控制器應(yīng)該具備強(qiáng)大的復(fù)雜方程解析能力和快速的運(yùn)算能力,只有具備這些能力才能保證畫(huà)面的流暢。整個(gè)過(guò)程,我們用圖3表示。
圖3 復(fù)雜過(guò)程的實(shí)現(xiàn)Fig.3 The implementation of complex process
過(guò)程建模方法,應(yīng)用于復(fù)合對(duì)象實(shí)質(zhì)上是不斷拆分的過(guò)程。復(fù)合對(duì)象首先是一個(gè)完整的實(shí)體對(duì)象,具備自身的繪制信息,動(dòng)態(tài)信息和行為信息,這樣它才具備獨(dú)立性和協(xié)調(diào)性;然后我們應(yīng)該賦予其拆分的能力。這個(gè)能力允許復(fù)合對(duì)象的某個(gè)子過(guò)程能夠相對(duì)其它子過(guò)程完成一系列動(dòng)作。我們使用樹(shù)來(lái)描述。這包含兩層意思,第一,復(fù)合對(duì)象只記錄它下一層的相關(guān)信息,即復(fù)合對(duì)象的節(jié)點(diǎn)只記錄它的孩子節(jié)點(diǎn)的關(guān)系信息,不記錄它的孩子節(jié)點(diǎn)的子節(jié)點(diǎn);第二,這個(gè)關(guān)系信息只包含組裝的位置關(guān)系,相對(duì)的動(dòng)作在子節(jié)點(diǎn)中。我們將這個(gè)拆分樹(shù)放在關(guān)系表中,并設(shè)立一個(gè)開(kāi)關(guān)來(lái)管理拆分樹(shù)的開(kāi)啟。我們?yōu)椴鸱謽?shù)建立如下結(jié)構(gòu)。
tree_node{
obeject;//復(fù)合對(duì)象或最簡(jiǎn)子過(guò)程;
int*child[];//指向它的孩子節(jié)點(diǎn);
bool simple_obj;//表征該對(duì)象是否能拆分;position_recorder;//創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu),這個(gè)結(jié)構(gòu)以
//child指針為頭,以它的位置為數(shù)據(jù)單元;
}
我們以太陽(yáng)-地球-月球系統(tǒng)來(lái)驗(yàn)證上邊提出的方法。
在太陽(yáng)-地球-月球系統(tǒng)中,太陽(yáng)位于中心位置,并且假定靜止,地球繞太陽(yáng)公轉(zhuǎn),地球的自轉(zhuǎn);月球繞地球公轉(zhuǎn),月球的自轉(zhuǎn)。我們將這個(gè)系統(tǒng)定義為一個(gè)過(guò)程,這個(gè)過(guò)程的第一層可以劃分為3個(gè)子過(guò)程,第二層出現(xiàn)3種子過(guò)程,這3種子過(guò)程每個(gè)只包含一個(gè)實(shí)體對(duì)象。如圖4所示。
我們使用下邊的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)這些過(guò)程:
Pro{
ProcessID;//用于表征這個(gè)過(guò)程的身份;
int*child[];//用于指向他的孩子;
圖4 太陽(yáng)-地球-月球系統(tǒng)的過(guò)程建模實(shí)現(xiàn)Fig.4 The implementation of process modeling for sun-earth-moon system
bool simple_pro,simple_obj;//第一個(gè)表示該子過(guò)程只包含
一個(gè)//實(shí)體對(duì)象,第二個(gè)表示該復(fù)合對(duì)象能否再劃分;
void pro_split();//用于劃分過(guò)程;包含兩重意思,一個(gè)是對(duì)于//多對(duì)象的劃分,一個(gè)是對(duì)復(fù)合對(duì)象的拆分;
}
對(duì)于最終的3種子過(guò)程,它們只包含一個(gè)實(shí)體對(duì)象,我們使用3DS來(lái)保存繪制信息,使用樹(shù)結(jié)構(gòu)來(lái)記錄關(guān)系表,使用下面的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn):
Object{
int ID;
char name;
bool com_true,switch;//第一個(gè)表征該對(duì)象是否為復(fù)合對(duì)象,第二//個(gè)控制復(fù)合對(duì)象拆分樹(shù)的開(kāi)啟;
3dsobject;//讀取繪制信息;
relative_tree;//這個(gè)樹(shù)包含對(duì)象能力,對(duì)象關(guān)系,以及復(fù)合對(duì)象的//拆分樹(shù);
Cvector location;//以下為行為信息;此條為位置信息;
Cvector scale;//此條為旋轉(zhuǎn)信息
}
我們來(lái)看這個(gè)例子的實(shí)現(xiàn)過(guò)程。其繪制信息都是一個(gè)球體,只是它們的大小不同。用下圖來(lái)分別表示他們的關(guān)系表。
圖5 各個(gè)對(duì)象的關(guān)系表匯總Fig.5 The relationship between objects
3個(gè)實(shí)體對(duì)象的行為信息,體現(xiàn)在每幀中的位置變化,為了獲得這些位置變化,同時(shí)獲得圖像刷新的速率(幀速率),我們調(diào)用timeGetTime()來(lái)提供一個(gè)參考值。我們?nèi)俾蕿閂(一般在25~30),那么更新每幀的時(shí)間為1/V。我們?nèi)〉厍虻墓D(zhuǎn)周期為Year,那么每幀地球的角位移為2π/(Year*V)。同理,月球的角位移為 2π/(Month*V)(注意,這個(gè)是在地月坐標(biāo)系中),地球和月球的旋轉(zhuǎn)矩陣為Re和Rm。獲取了這些位置信息之后,我們調(diào)用display()函數(shù)來(lái)更新行為信息,使用RenderScene()來(lái)繪制圖形,程序的框架如下圖所示。
圖6 太陽(yáng)-地球-月球系統(tǒng)的實(shí)現(xiàn)流程Fig.6 The implementation of sun-earth-moon system
使用上面的方法,我們得到的效果如圖7所示。
圖7 太陽(yáng)-地球-月球系統(tǒng)的實(shí)現(xiàn)效果圖Fig.7 The simulated effect
文中提供了一種復(fù)雜過(guò)程和復(fù)合對(duì)象三維建模的方法,著重解決了復(fù)雜環(huán)境下過(guò)程實(shí)現(xiàn)和對(duì)象建模中遇到的問(wèn)題,并提出了一種有效的解決方法。然而正如圖5所示那樣,實(shí)體對(duì)象之間的關(guān)系表存在比較嚴(yán)重的重復(fù),這對(duì)于系統(tǒng)消耗來(lái)說(shuō)是一種浪費(fèi),有待于進(jìn)一步的改進(jìn)。另外,虛擬現(xiàn)實(shí)技術(shù)是對(duì)于視聽(tīng)觸等多感官的模擬,文中模型只是著眼于視覺(jué)的一種考慮,如何為模型提供更多感官接口,提供更強(qiáng)大的集成,有待于進(jìn)一步的研究。
[1]楊四亦.計(jì)算機(jī)動(dòng)畫(huà)運(yùn)動(dòng)生成的方法和原理[J].電子出版,1995.YANG Si-yi.The method and principle of computer animation motion generated by[J].Electron Publishing,1995.
[2]唐斌.3D角色動(dòng)作生成技術(shù)現(xiàn)狀[J].黑龍江科技信息,2009(19):080.TANG Bin.The actuality of 3D movement generated technology[J].Heilongjiang Science and Technology Information,2009(19):080.
[3]Wachter S,Nagel H H.Tracking of persons in monocular image sequences [C]//Nonrigid and Articulated Motion Workshop, 1997.Proceedings., IEEE.IEEE,1997:2-9.
[4]王建坡.三維實(shí)體模型相關(guān)技術(shù)研究[D].鄭州:解放軍信息工程大學(xué),2011.
[5]張合,劉小紅.面向?qū)ο蟮膶?duì)象建模技術(shù)及其應(yīng)用研究[J].軟件,2011,32(3):66-68.ZHANG He,LIU Xiao-hong.Researches on object-oriented object modeling technology and its application[J].Software,2011,32(3):66-68.
[6]Smelik R M,Tutenel T,de Kraker K J,et al.A declarative approach to proceduralmodeling ofvirtualworlds[J].Computers&Graphics,2011,35(2):352-363.
[7]張晉西,郭學(xué)琴.SolidWorks及COSMOSMotion機(jī)械仿真設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.
[8]劉茗.淺論動(dòng)畫(huà)制作的技巧[J].淮海工學(xué)院學(xué)報(bào),2001(5):79-82.LIU Ming.A Brief Study on the techniques of animation[J].Journal of huaihai institute of technology,2001(5):79-82.
[9]蔡勇,楊振中.基于 OpenGL的三維建模仿真軟件開(kāi)發(fā)[J].兵工自動(dòng)化,2004,23(4):9l-92.CAI Yong,YANG Zhen-zhong.Development of 3D modeling and simulation software based on OpenGl[J].Ordnance Industry Automation,2004,23(4):9l-92.
[10]Angel E.Interactive computer graphics[M].Addison-Wesley Longman Publishing Co., Inc.,1999.