專利名稱::一種對復雜葉片的快速簡化和繪制方法
技術(shù)領域:
:本發(fā)明屬于計算機圖形學與數(shù)字農(nóng)林學相結(jié)合的交叉學科領域,涉及一種高效的復雜葉片簡化和繪制算法。
背景技術(shù):
:植物場景的繪制是計算機圖形學中一個重要的課題。許多涉及到戶外場景的應用,如城市規(guī)劃,園林設計等,都需要在已有場景中增加植物模型,并對它們進行渲染,以增強繪制結(jié)果的真實感。但植物通常具有繁多的幾何細節(jié),它們的加入將導致繪制速度下降而達不到實時的要求。因此在保證真實感的前提下如何提高繪制速度是一個關鍵問題。為了提高植物場景的繪制速度,人們陸續(xù)提出了各種算法。大部分算法采用紋理圖像代替原復雜幾何模型來加速繪制。典型代表為Rohlf和Helman1994年采用的廣告牌方法(Billboard)。該方法通常在預處理中確定一系列采樣視點,在每一個視點方向,對植物體進行繪制,并把繪制結(jié)果作為紋理圖像保存下來。而在實時繪制時,根據(jù)當前視點信息,找到與其最鄰近的采樣視點,然后對這些采樣視點相對應的紋理圖像進行插值,插值得到的圖像即作為當前視點的渲染結(jié)果圖像。在所有植物繪制的加速算法中,基于圖像的算法繪制速度最快,且繪制時間與植物場景的幾何復雜度無關。但是這種方法需要消耗很大的內(nèi)存來存儲紋理圖像,并且因為缺少植物的幾何信息,繪制近距離植物時真實感和視差效果都較差。圖2(a)和圖2(b)顯示了用此方法繪制森林時的結(jié)果圖,其中圖2(a)為繪制近距離樹木的結(jié)果,圖2(b)為繪制遠處樹木的結(jié)果。另外有人采用點代替三角形來描述在圖像空間的投影面積小于一個像素的樹葉。這種方法具有很高的繪制效率。但它只適用于遠距離植物的繪制;并且它會平滑掉植物的一些尖銳特征,降低繪制結(jié)果的真實度;此外離散的點還會破壞植物的拓撲結(jié)構(gòu)。圖3(a)和圖3(b)分別為Deussen在2002年采用的基于點的方法繪制草地和森林時結(jié)果圖。最近幾年,針對植物,提出了基于多邊形的方法。多邊形,特別是三角形模型一直是計算機圖形學的主流模型,因此人們在面片簡化方面研究很深入,提出了很多成熟的層次細節(jié)算法,如vertexdecimation,edgecollapse,vertexclustering等。但由于樹木特殊的屬性,這些算法通??梢杂糜跇涓傻暮喕?,對于樹葉部分,則會產(chǎn)生錯誤的結(jié)果。為彌補這一缺陷,針對樹葉,從2002年起,Remolar等人陸續(xù)提出了幾種簡化算法。其關鍵步驟稱之為葉片合并(leafcoll即se),即用一個新的葉子代替原來的兩片葉子(見圖4)。通過迭代地進行葉片合并操作,就能不斷減少用于表示樹葉的多邊形的數(shù)目,同時保持樹冠外形,如圖5所示,其中圖5(a)為原始模型,圖5(b)為使用leafcollapse簡化后的模型。但現(xiàn)有的簡化算法還存在很多缺陷。主要有三點(l)只能簡化四邊形或三角形形狀的葉片,簡化復雜葉片時會產(chǎn)生錯誤的結(jié)果,缺乏通用性;(2)簡化效率很低,簡化一棵普通成年樹的樹葉,往往需要幾小時,甚至超過一天;(3)大部分算法因缺乏高效的細節(jié)層次模型提取方法,并且不支持硬件加速,導致樹冠部分的繪制效率很低。
發(fā)明內(nèi)容本發(fā)明欲解決的技術(shù)問題是如何快速簡化具有各種形狀的植物冠層器官,如葉、花、果實,建立植物冠層的多分辨率表示,以及繪制時如何高效地選擇合適的分辨率表示代替冠層的原始模型,最終達到實時的目的,并保證繪制結(jié)果的真實感,為此本發(fā)明提供一種復雜葉片的快速簡化和繪制方法。為達成所述目的,本發(fā)明以樹葉為例,提供一種復雜葉片的快速簡化和繪制方法,該方法可推廣到花和果實的處理,它由預處理和實時繪制兩個階段組成,包括以下9個步驟,其中步驟Sl-S7在預處理階段完成,步驟S8-S9在實時繪制階段完成,具體包括如下步驟Sl:首先輸入樹模型,提取樹葉信息;步驟S2:對葉簇內(nèi)的每一片葉片進行判斷,判斷葉片是否為,如果是,則把葉片復雜的網(wǎng)格模型簡化成四邊形,完成葉片的第一個層次簡化;如果不是復雜葉片,則執(zhí)行步驟S3;步驟S3:通過迭代的葉片合并操作把葉簇內(nèi)的四邊形葉片逐漸簡化成為一個四邊形,該四邊形稱之為葉簇代表四邊形,完成葉片的第二個層次簡化;步驟S4:迭代地對樹冠中的代表四邊形葉片執(zhí)行葉片合并操作,直到整個樹冠用一個四邊形表示,完成葉片的第三個層次簡化,第三個層次采用距離限制法對簡化過程進行加速;步驟S5:計算所有葉片的密度,并根據(jù)葉片密度調(diào)節(jié)處于樹冠中不同位置的葉片的簡化誤差;步驟S6:采用數(shù)組結(jié)構(gòu)把葉片的幾何信息和簡化信息分別保存到兩個數(shù)組中;步驟S7:把保存了幾何信息和簡化信息的兩個數(shù)組作為不同文件保存到硬盤中;步驟S8:把保存了葉片的幾何信息和簡化信息的文件從硬盤分別讀入CPU和GPU內(nèi)存,并設定相機信息和像素誤差;步驟S9:根據(jù)當前視點信息和像素誤差,通過對保存了簡化信息的數(shù)組進行兩次二次搜索,確定冠層合適的細節(jié)層次模型;對相應細節(jié)層次模型進行繪制,得到繪制圖像。所述簡化成四邊形是采用改進的點對收縮算法把葉片復雜的網(wǎng)格模型簡化成四邊形。對每片葉片指定兩個頂點為角點,角點在簡化過程中幾何位置保持不變,其中第一角點定義為距離其承接莖最遠的頂點,第一角點是葉尖所對應的點;第二角點是與葉柄相連的點,通過第一角點根據(jù)葉片的對稱性得到第二角點。所述采用距離限制法對簡化進行加速時,首先由用戶設定一個距離閾值Q,然后求取距離小于或等于閾值的葉對,為有效葉對,并把最優(yōu)葉對的篩選限定在有效葉對中進行。在求取有效葉對時,采用葉片的中心點代替葉片,并對中心點采用改進的八叉樹結(jié)構(gòu)進行細分;該八叉樹結(jié)構(gòu)首先計算中心點的包圍盒,然后對它不斷地細分;每一次把盒子細分成八份,每次劃分都在盒子最長的那條邊進行,并且每次劃分后,因劃分而得到的兩個盒子在對應邊上增大Q/2;這樣的細分不斷進行,直到盒子里的中心點的數(shù)目小于或等于用戶設定的閾值L,或者盒子有一條邊的長度不再大于閾值Q。所述葉片A的密度A=A(A,p)定義為葉片A臨域內(nèi)葉片的數(shù)目,其中A代表一片葉片的編號,葉片A的臨域定義為球心位于葉片A的中心,半徑為P的球體;按照此定義求出原始模型中的原始葉片的密度后,再進行歸一化操作,使得原始葉片的密度值屬于[i,n],其中參數(shù)n由用戶定義;而葉片合并操作中新生成的葉片的密度定義為參與合并的兩片葉片的加權(quán)平均值,5其中權(quán)重由葉片的合并次數(shù)決定,葉片的合并次數(shù)記錄著被它合并的原始葉片的數(shù)目。所述用數(shù)組結(jié)構(gòu)存儲葉片的簡化信息,該數(shù)組結(jié)構(gòu)支持GPU加速,它滿足以下兩個條件(1).組成樹冠的任意的一個細節(jié)層次模型的各節(jié)點都是連續(xù)地存儲在數(shù)組中,即不同的細節(jié)層次模型都構(gòu)成數(shù)組中完整的一段;(2).—旦用戶給定像素誤差,只需對數(shù)組執(zhí)行兩次二次搜索就能確定冠層合適的細節(jié)層次模型。數(shù)組中每個節(jié)點被賦予三個值emin,e^和SN,其中e^是該節(jié)點的簡化誤差,emax是其父節(jié)點的簡化誤差,SN是該節(jié)點表示的葉片的序號;該數(shù)組由傳統(tǒng)二叉樹結(jié)構(gòu)變換而來,在把二叉樹轉(zhuǎn)換成數(shù)組的過程中,以emax的降序排列為主要規(guī)則,以emin的降序排列為輔助規(guī)則;當新加入的節(jié)點不滿足emin排序時,對不滿足條件的節(jié)點進行分裂,使其一分為二,最終使數(shù)組同時滿足emax和e^降序排序。兩次二次搜索的條件分別是e^〈e和e^〉"其中e是當前允許的空間誤差,并利用相鄰幀之間的關聯(lián)性來縮小搜索范圍。本發(fā)明的有益效果本發(fā)明的方法有四處體現(xiàn)了特色和創(chuàng)新。一是采用兩步簡化法簡化葉片,具有通用性,克服了傳統(tǒng)方法只能簡化四邊形和三角形形狀葉片的缺陷;二是通過距離限制縮小了最優(yōu)葉對的搜索范圍,提高了簡化效率;三是采用適合CPU,GPU操作的線性數(shù)組結(jié)構(gòu)代替?zhèn)鹘y(tǒng)的二叉樹結(jié)構(gòu)存儲葉片簡化信息,并在數(shù)組的基礎上實現(xiàn)高效地提取當前視點對應的冠層部分的細節(jié)層次模型;四是通過密度因素調(diào)節(jié)位于不同位置的冠層器官的細節(jié)層次,構(gòu)建樹冠的多分辨率共存模型。從而能在保持簡化結(jié)果的圖像質(zhì)量的前提下獲得更大的幾何數(shù)據(jù)壓縮比率。通過測試,本方法確實能夠有效簡化常見的各種形狀的葉片,具有較高的簡化效率和繪制效率。即使是枝葉繁茂的大樹,預處理也能在幾秒內(nèi)完成。而繪制時間通常為幾十微秒。同時,它能極大地壓縮幾何數(shù)據(jù),同時保持樹冠的視覺效果不變,并能有效地克服走樣現(xiàn)象。即使壓縮率很高時,仍能保持這一性質(zhì)。當視點連續(xù)變化時,樹冠的各層次細節(jié)模型之間的過渡也是連續(xù)的,不存在突變現(xiàn)象。本發(fā)明適用于各類常見植物的冠層的快速繪制。可用于城市可視化,園林設計,飛行模擬,虛擬現(xiàn)實和電腦游戲等應用中,以及輔助農(nóng)林學家可視化其研究對象。圖1是本發(fā)明算法流程圖圖2(a)是傳統(tǒng)的基于圖像的算法繪制近距離樹木的結(jié)果圖;圖2(b)是傳統(tǒng)的基于圖像的算法繪制遠處樹木的結(jié)果圖;圖3(a)是傳統(tǒng)的基于點的算法繪制草地時的結(jié)果圖;圖3(b)是傳統(tǒng)的基于點的算法繪制森林時的結(jié)果圖;圖4是傳統(tǒng)的葉片合并操作(leafcollapse)示意圖;圖5(a)是原始樹模型;圖5(b)是采用傳統(tǒng)的基于多邊形的方法簡化后的結(jié)果;圖6是本發(fā)明采用的改進的八叉樹結(jié)構(gòu);圖7(a)是傳統(tǒng)的二叉樹結(jié)構(gòu);圖7(b)是傳統(tǒng)的由二叉樹轉(zhuǎn)換而來的數(shù)組;圖7(C)是傳統(tǒng)方法求細節(jié)層次模型的過程和結(jié)果;樹轉(zhuǎn)變?yōu)橥瑫r滿足e^和emax排序的數(shù)組的分解步驟;圖9是本發(fā)明簡化復雜葉片的結(jié)果圖;圖10是本發(fā)明簡化黑楊樹的四個結(jié)果;圖11(a)是本發(fā)明用于繪制時間比較實驗的白楊樹模型;圖11(b)是本發(fā)明把冠層細節(jié)層次模型量化成內(nèi)的實數(shù)的結(jié)果;圖11(c)是本發(fā)明采用四種繪制方式繪制白楊樹樹冠的時間比較結(jié)果;圖12(a)是本發(fā)明用于密度影響實驗的楓樹模型;圖12(b)是本發(fā)明不使用密度調(diào)節(jié)時楓樹的簡化模型;圖12(c)是本發(fā)明使用密度調(diào)節(jié)時楓樹的簡化模型,它與圖12(b)采用相同的空間允許誤差;圖12(d)是本發(fā)明不使用密度調(diào)節(jié)時楓樹的簡化模型;圖12(e)是本發(fā)明使用密度調(diào)節(jié)時楓樹的簡化模型,它與圖12(d)的葉片數(shù)目相當;圖13是采用本發(fā)明繪制處于不同位置的四棵山楂樹的結(jié)果圖;圖14是本發(fā)明以步行方式漫游森林時的結(jié)果;圖15是本發(fā)明以鳥瞰方式漫游森林時的結(jié)果。具體實施例方式下面結(jié)合附圖詳細說明本發(fā)明技術(shù)方案中所涉及的各個細節(jié)問題?!?、方法概述(overviewofapproach)本發(fā)明以葉片的簡化為例,花和果實的簡化類似。本發(fā)明中葉片簡化算法由預處理和實時繪制兩個部分組成。在預處理階段中,葉片簡化依次在三個層次,即單片葉片、葉簇和整個樹冠進行。在第一層次中,葉片的網(wǎng)格模型被簡化成四邊形。第二和第三層次則通過不斷地篩選出兩片四邊形的葉子進行合并來減少冠層中葉片的數(shù)目。同時通過在第三層次中設定距離限制,預先排除因距離較遠而不可能合并的葉對來提高簡化效率。為了建立冠層的多邊分辨率表示,每片葉片都賦予了一個密度值,表針它所在區(qū)域的葉片的疏密程度。該密度值用于調(diào)節(jié)對應的葉片的簡化誤差,使得密度越大時簡化誤差越小。最終樹冠中位于不同位置的葉片也就因密度的不同而擁有不同的細節(jié)層次。在預處理最后階段,所有簡化過程的數(shù)據(jù),包括幾何數(shù)據(jù)和簡化信息,都存入硬盤。其中簡化信息(簡化關系、簡化誤差等)被保存到一個適合CPU和GPU操作的線性數(shù)組結(jié)構(gòu)中。在實時繪制階段,則首先讀入存放在硬盤中的簡化數(shù)據(jù),然后根據(jù)當前視點與樹木之間的距離、相機的參數(shù)以及用戶設定的像素誤差,通過對數(shù)組結(jié)構(gòu)進行兩次簡單的二次搜索,提取出冠層適合的細節(jié)層次模型進行繪制。本發(fā)明算法的核心在于復雜葉片的兩步簡化法、距離限制法、葉片密度相關的多分辨率模型構(gòu)造法,以及基于數(shù)組結(jié)構(gòu)的細節(jié)層次模型提取法。算法具體包括9個步驟,其中前7個步驟在預處理階段完成,后2個步驟在實時繪制階段完成。如圖l給出了本發(fā)明整個算法的流程。1、首先輸入樹模型,提取樹葉信息。2、判斷葉片是否為復雜葉片,如果是,則把葉片復雜的網(wǎng)格模型簡化成四邊形。這7層次,對象是葉簇內(nèi)的每一片葉片。3、通過迭代的葉片合并操作把葉簇內(nèi)的四邊形葉片逐漸簡化成為一個四邊形,該四邊形稱之為代表四邊形。這是簡化的第二個層次。4、迭代地對樹冠中的代表四邊形葉片執(zhí)行葉片合并操作,直到整個樹冠用一個四邊形表示。這是簡化的第三個層次。該層次采用了距離限制法對簡化過程進行加速。5、計算所有葉片的密度,并根據(jù)密度調(diào)節(jié)位于冠層中不同位置的葉片的簡化誤差。6、把葉片的幾何信息和簡化信息分別保存到兩個數(shù)組中。7、把保存了幾何信息和簡化信息的兩個數(shù)組作為不同文件保存到硬盤中。8、實時繪制開始時,把保存了葉片的幾何信息和簡化信息的文件從硬盤分別讀入CPU和GPU內(nèi)存,并設定相機信息和像素誤差。9、根據(jù)當前視點信息和像素誤差,通過對保存了簡化信息的數(shù)組進行兩次二次搜索,確定冠層合適的細節(jié)層次模型,并對該細節(jié)層次模型進行繪制,得到繪制圖像。二、復雜葉片的簡化自然界中的葉片通常具有各式各樣的形狀,每片葉片可由一個網(wǎng)格(Mesh)模型表示。它們不能被現(xiàn)有葉片簡化算法簡化,因為現(xiàn)有算法只能簡化四邊形或者三角形形狀的葉片。為簡化具有任意形狀的葉片,本發(fā)明算法采取了兩個步驟。在第一步中把葉片復雜的網(wǎng)格模型簡化成四邊形;然后再在第二步中采用葉片合并操作對四邊形形狀的葉片進行簡化。在第一步,也就是葉片從網(wǎng)格模型簡化成四邊形的過程中,采用的是改進的點對收縮算法(VertexPairContraction)。葉簇中的每一片葉片的網(wǎng)格模型中的頂點分為三類內(nèi)點、邊界點和角點。其中內(nèi)點和邊界點的定義和傳統(tǒng)的網(wǎng)格簡化算法一樣,而角點的定義稍稍做了調(diào)整。為了能在簡化過程中更好地保持葉片的外形,有兩種頂點被定于為角點,它們在簡化過程中保持不變。其中第一角點是葉尖所對應的點,它通常距離其承接莖最遠。第二角點是與葉柄相連的點,雖然在植物幾何模型數(shù)據(jù)中,葉柄通常是缺省的。第二角點可通過第一角點根據(jù)葉片的對稱性得到。在定義好三種點之后,就可對每一對有邊相連的頂點求取簡化誤差并進行排序,然后選取誤差最小的一對頂點進行簡化。此過程不斷地進行,直到網(wǎng)格變成四邊形。第二步采用傳統(tǒng)的葉片合并操作依次在葉簇和樹冠這兩級層次做簡化。在每一步簡化中,首先根據(jù)代價函數(shù)求取當前層次中每對葉片的相似度程度,然后從中選出最相似的一對葉片,即代價最小的一對葉片進行葉片合并操作。操作完成后,被簡化的兩片葉片消失,而新生成的葉片代替它們進行下一步的簡化。這樣的簡化是一個迭代過程。首先在葉簇內(nèi)執(zhí)行,不斷地兩兩合并,直到葉簇內(nèi)的所有的葉片合并成為一個四邊形,該四邊形稱之為代表四邊形。通過實例化信息(已知,植物建模中產(chǎn)生),把代表四邊形進行位移、旋轉(zhuǎn)、大小縮放等變換,可得到樹冠中所有的各自代表著一個葉簇的四邊形。為簡單起見,仍稱它們?yōu)榇硭倪呅巍T跇涔趯哟蔚暮喕词菍@些代表四邊形進行迭代的簡化。和葉簇層次類似,直到樹冠中的所有代表四邊形由一個四邊形表示,簡化才結(jié)束。三、簡化過程的加速8葉片的兩步簡化法中的第二步是迭代過程,無論是在葉簇層次,還是樹冠層次,都需要不斷地計算所有參與簡化的葉對的代價值,然后從中篩選出代價最小的葉對進行葉片合并操作,非常耗時。據(jù)觀察,當兩片葉片相距很遠時,它們幾乎不會被選中而進行葉片合并操作或線合并操作。因此可以假設只有當兩片葉片之間的距離小于一定數(shù)值時,這兩片葉片才可能被簡化。其中兩片葉片之間的距離為它們的中心點之間的距離。通過這項假設,可以首先由用戶設定一個距離閾值Q,然后求取距離小于或等于閾值的葉對,為有效葉對,并把最優(yōu)葉對的篩選限定在有效葉對中進行,從而避免對那些因相距較遠而不可能合并的葉對進行不必要的計算和篩選。為了得到樹冠中滿足距離條件的葉對,即有效葉對,一個直接的方法就是對樹冠中所有葉對求距離,然后進行判斷。如果葉對之間的距離小于或等于閾值Q,則該葉對滿足距離條件;否則,不滿足。但這樣求取有效葉對的方法的復雜度為0(!12),其中n為樹冠中葉片的數(shù)目。為了加速有效葉對的求取,可采用改進的八叉樹結(jié)構(gòu)。該結(jié)構(gòu)有一個很大的優(yōu)點,那就是在對一個節(jié)點求有效葉對時,不需要同時遍歷其鄰居節(jié)點。也就是說,只需單獨求出該八叉樹的每一個葉節(jié)點內(nèi)的有效葉對,就能得到樹冠中的所有的有效葉對。為了簡化計算,每一片葉片由其中心點代替。改進的八叉樹結(jié)構(gòu)就是對葉片的中心點建立的。首先計算中心點的包圍盒,然后對它不斷地細分。每一次把盒子細分成八份,每次劃分都在盒子最長的那條邊進行,而不像傳統(tǒng)的八叉樹依次對X、Y、Z三根軸進行劃分。并且每次劃分后,因劃分而得到的兩個盒子都會在對應邊上增大Q/2,如圖6所示,其中圖6左是劃分前的盒子,圖6右是劃分一次后的兩個盒子。這樣的細分不斷進行,直到盒子里的葉片的數(shù)目,即中心點的數(shù)目小于或等于用戶設定的閾值L,或者盒子有一條邊的長度不再大于閾值Q。根據(jù)八叉樹結(jié)構(gòu)可求出樹冠中的有效葉對。這些有效葉對只需計算一次,它們是接下來所有葉片合并操作的候選葉對。每一次簡化,需要在候選葉對中選出最優(yōu)葉對,即代價最小的葉對參與葉片合并操作。篩選過程分兩步進行。第一步,在八叉樹的每個葉節(jié)點內(nèi)找出代價最小的葉對,這些葉對稱為準最優(yōu)葉對;第二步,對準最優(yōu)葉對進行比較,找出它們之中代價最小的葉對,即全局最優(yōu)葉對。在執(zhí)行完一次葉片合并操作后,新生成的葉片取締參與合并的兩片葉片。這時需找出有關的葉節(jié)點,即包含了其中一片或兩片參與合并的葉片的葉節(jié)點,然后對它們的有效葉對記錄進行相應的調(diào)整,并重新計算這些葉節(jié)點的準最優(yōu)葉對。而其他的葉節(jié)點的有效葉對記錄和準最優(yōu)葉對都保持不變。因此每次簡化只需更新一部分葉節(jié)點的記錄,這也是利用八叉樹結(jié)構(gòu)分兩步篩選最優(yōu)葉對的一個最大的優(yōu)點。值得一提的是,迭代的葉片合并操作需要在葉簇和樹冠兩個層次中進行。葉簇內(nèi)的葉片數(shù)目通常很小,例如只有5片葉子,不需要加速。因此上述加速算法只在樹冠層次使用。四、細節(jié)層次模型的提取葉片簡化算法雖然能建立植物冠層的連續(xù)的細節(jié)層次模型,但在繪制階段如何根據(jù)當前的視點信息快速確定植物冠層的滿足誤差條件的細節(jié)層次模型是實現(xiàn)植物場景實時漫游的一個關鍵問題。因為在繪制每一幀圖像時,需要對位于視錐內(nèi)的每棵植物確定其9細節(jié)層次模型。如果缺乏高效的細節(jié)層次模型提取算法,就會因為累計效果而成為瓶頸。植物冠層的細節(jié)層次模型提取算法的效率和用于存儲葉片簡化信息的數(shù)據(jù)結(jié)構(gòu)息息相關。傳統(tǒng)葉片簡化算法在預處理結(jié)束之時采用數(shù)組結(jié)構(gòu)存儲葉片的幾何數(shù)據(jù),如頂點坐標、法向、紋理坐標等信息,并采用二叉樹結(jié)構(gòu)存儲簡化信息。其中每一次葉片合并操作中新生成的葉片保存為參與合并的兩片葉片的父節(jié)點。此外,二叉樹中的每個節(jié)點還保存了對應的簡化誤差e。實時繪制時,首先把幾何數(shù)據(jù)讀入GPU內(nèi)存,把簡化信息讀入CPU內(nèi)存。然后根據(jù)相機的信息以及相機與待繪制的針葉樹之間的距離,把用戶定義的像素誤差l轉(zhuǎn)換成空間誤差e。接著根據(jù)空間誤差e,對保存了簡化信息的二叉樹結(jié)構(gòu)進行遍歷,直到遇到簡化誤差小于e的節(jié)點,這些節(jié)點就構(gòu)成樹冠合適的細節(jié)層次模型。最后把這些節(jié)點對應的頂點索引送往GPU,借助OpenGL中的VBO(VertexBufferObjects)技術(shù)即可進行繪制。一旦視點改變,需要重新計算空間誤差并重新遍歷樹狀結(jié)構(gòu),以更新細節(jié)層次模型。通過這種遞歸的方式確定細節(jié)層次模型,效率很低,并且不支持硬件加速。為此,本算法對二叉樹結(jié)構(gòu)進行了調(diào)整,提出了一種適合GPU渲染管道的線性數(shù)據(jù)結(jié)構(gòu)來保存葉片的簡化信息。利用該線性數(shù)據(jù)結(jié)構(gòu),一旦給定視點信息,可以僅通過兩次簡單的二次搜索就能確定冠層合適的細節(jié)層次模型。1數(shù)組結(jié)構(gòu)對于如何把二叉樹結(jié)構(gòu)變成數(shù)組結(jié)構(gòu),Dachsbacher等人提出了一種方法。在二叉樹結(jié)構(gòu)中,每個節(jié)點保存了一個值rmin,它記錄著該節(jié)點被選中而送往GPU繪制的最小距離。對二叉樹進行由上至下遍歷時的判斷條件是r>r^,其中r是當前相機與物體之間的距離。也就是說,如果節(jié)點的rmin小于或等于r,則該節(jié)點是細節(jié)層次模型的一部分,應送往GPU進行繪制;否則繼續(xù)對其子節(jié)點進行判斷。為把二叉樹變成數(shù)組,Dachsbacher等人對二叉樹中的每個節(jié)點賦予了兩個值r^和r^,其中rmax是節(jié)點對應的父節(jié)點的r^值。如果節(jié)點是根節(jié)點,則它的r^值為無窮大。[rmin,rmax)就構(gòu)成每個節(jié)點的有效范圍(見圖7(a))。這時,遞歸判斷條件r〉r^可以轉(zhuǎn)換成另一種非遞歸形式rG[rmin,rmax),即如果r落在一個節(jié)點對應的rmin和rmax范圍內(nèi),則該節(jié)點是細節(jié)層次模型的一部分,需要進行繪制;否則不繪制。采用非遞歸形式的判斷條件的最大的優(yōu)點在于每次判斷只需對一個節(jié)點進行,不需考慮該節(jié)點和其他節(jié)點的關系,各節(jié)點是相互獨立的。在算法的具體實施過程中,Dachsbacher等人把二叉樹中的節(jié)點按照r^值排序得到一個數(shù)組(見圖7(b))。當用戶給定一個r值,如圖7(c)中,r=3.5,首先通過一次二次搜索剔除掉位于數(shù)組尾部的因r,值小于r而不可能構(gòu)成當前的細節(jié)層次模型的一些節(jié)點,接著對剩余的節(jié)點一一進行條件判斷rG最終滿足條件的節(jié)點,如圖7(c)中的節(jié)點c、e、f和g,就構(gòu)成了適合當前視點的細節(jié)層次模型,這些節(jié)點通常離散地分布在數(shù)組中。為了使任何一個細節(jié)層次模型的各節(jié)點連續(xù)地存儲在數(shù)組中,即不同的細節(jié)層次模型都構(gòu)成數(shù)組中的完整的一段,只是每段的起始點和終點不同。本算法對Dachsbacher等人的方法進行了改進,使得最終由二叉樹轉(zhuǎn)變而來的數(shù)組不僅滿足rmax排序,還滿足rmin排序。這樣就能更有效地利用GPU的資源。如果把一個節(jié)點的有效范圍[rmin,rniax)分成不同段,例如[rmin,ri),[巧,ig...[1>r^),然后對每一段分別判斷,判斷結(jié)果不會因此改變。假如r值落入其中的某一段,那么r值同樣滿足條件rG[rmin,rmax);假如任何一段都不包含r值,則r也不會滿足條件rG[rmin,rmax)。在構(gòu)建同時滿足rmax排序和rmin排序的數(shù)組中,正是利用了節(jié)點的這種屬性,對只滿足其中一種排序的節(jié)點進行分裂。雖然分裂會使一個節(jié)點變成兩個,導致數(shù)組中節(jié)點數(shù)目的增加。針對葉片簡化算法,在對二叉樹遍歷時,判斷一個節(jié)點是否繪制在于它的簡化誤差e是否小于或等于空間誤差e。因此,符號r,r^和r^可以轉(zhuǎn)換成對應的e,emin和emax。數(shù)組中的每個節(jié)點被賦予三個值e^,e,和SN,其中e^是該節(jié)點的簡化誤差,emax是其父節(jié)點的簡化誤差,SN表示葉片的序號,通過這個值可以得到該葉片的頂點索引信息,即得到表示該葉片的多邊形的頂點編號。在數(shù)組的構(gòu)建過程中,在把二叉樹轉(zhuǎn)換成數(shù)組的過程中,emax的降序排序為主要的規(guī)則,而emin的降序排序為輔助規(guī)則。因此,當在數(shù)組中添加新節(jié)點時,數(shù)組仍能滿足emax排序,但不一定滿足e^排序。不滿足輔助規(guī)則時,就需對相關節(jié)點的有效范圍進行細分而產(chǎn)生新的節(jié)點,使其最終也同時滿足emin排序。對不滿足條件的節(jié)點進行分裂,使其一分為二,最終使數(shù)組同時滿足emax和emin降序排序。算法1顯示了由二叉樹轉(zhuǎn)變成同時滿足rmax和rmin排序的數(shù)組的偽代碼。算法1:二叉樹轉(zhuǎn)變?yōu)橥瑫r滿足e^和e皿排序的數(shù)組輸入二叉樹輸出F_Array初始化把二叉樹的根節(jié)點添加到F_Array;currentNode為F_Array的第一個節(jié)點whilenotFinished()dodoifcurrentNode==currentNodeend6ls6leafnode=itsnextnodechildl=currentNode.Childl;child2=currentNode.Child2;lastNode=thelastnodeofF_Array;ifeminSatisfied(childl,child2,lastNode)==YesAddNodesInArray(childl,child2);currentNode=currentNodnextnode;end6ls6foreachnodefromcurrentNod'snextnodetolastNodePropagate(node,currentNode.emin)endAddNodesInArray(childl,child2,newpropagatednodes)currentNode=lastNode'snextnode;endendend算法1主要由3個函數(shù)函數(shù)eminSatisfied,函數(shù)AddNodesInArray禾口函數(shù)Propagate組成。其中函數(shù)eminSatisfied判斷當力口入當前節(jié)點(currentNode)的兩個子節(jié)點時,數(shù)組是否依舊滿足e^排序。如果兩個子節(jié)點的e^值小于或等于當前數(shù)組中最后一個節(jié)點(las飼e)的e^,則函數(shù)eminSatisfied返回真;否則返回假。函數(shù)AddNodesInArray按照emin由大到小的順序在數(shù)組中添加新的節(jié)點。函數(shù)Propagate則以當前節(jié)點的e^值(currentNode'semin)為分界點對節(jié)點的有效范圍進行細分,即把一個節(jié)點的有效范圍[e邁in,e隨)分成[emin,currentNode'semin)禾口[currentNode'semin,e隨)兩段,并賦給兩個新節(jié)點,但這兩個新節(jié)點的SN值相同,都等于被分裂節(jié)點的SN。圖8依次顯示了把圖7中的二叉樹轉(zhuǎn)變成同時滿足emax和emin排序的數(shù)組的5個步驟。圖中每個節(jié)點都賦予了一個有效范圍[emin,emax)和一個SN值。在第一步中,當前節(jié)點(currentNode)和數(shù)組中的最后一個節(jié)點(lastNode)相同,均為二叉樹的根節(jié)點a。節(jié)點a有兩個子節(jié)點節(jié)點b和c。因為節(jié)點b和c的簡化誤差都小于lastNode的emin,因此函數(shù)eminSatisfied返回真。此時節(jié)點b和c按照emin由大到小的順序直接添加到數(shù)組,如圖8中第二步所示。之后,當前節(jié)點往下順延一位,成為節(jié)點b,而lastNode為節(jié)點c。節(jié)點b有兩個子節(jié)點節(jié)點d和e。由于節(jié)點d的簡化誤差大于節(jié)點c的emin值,使得函數(shù)eminSatisfied返回假,這意味著在數(shù)組中新加入節(jié)點d和e會破壞emin排序。這時需要對位于currentNode禾口lastNode之間的節(jié)點以及l(fā)astNode執(zhí)行函數(shù)Propagate,艮卩進行分裂操作而產(chǎn)生新的節(jié)點。如圖8中的第三步所示,節(jié)點c的有效范圍[3,10)被分為兩段[3,7)和[7,10),因此產(chǎn)生兩個新的節(jié)點,這兩個新的節(jié)點的SN均為c,它們將代替被分裂的原始節(jié)點c。分裂操作完成后,新生成的兩個節(jié)點和當前節(jié)點的兩個子節(jié)點,也就是節(jié)點d和e按照e^遞減的順序加入數(shù)組。值得注意的是,這一步完成后,當前節(jié)點不往下順延一位,變成節(jié)點c,而成了lastNode的下一位,即節(jié)點d,而lastNode為節(jié)點e。接下來的每一步中,在數(shù)組中新加入當前節(jié)點的兩個子節(jié)點都能滿足e^排序,也就是函數(shù)eminSatisfied始終返回真,這時只需把兩個子節(jié)點直接添加到數(shù)組,不需要執(zhí)行函數(shù)Propagate。在葉片簡化算法中,葉片合并操作的信息采用二叉樹結(jié)構(gòu)保存,而復雜葉片的網(wǎng)格模型簡化成四邊形的過程采用線性結(jié)構(gòu)保存。當把二叉樹轉(zhuǎn)換成數(shù)組結(jié)構(gòu)之后,可以把這兩部分統(tǒng)一起來,用同一個數(shù)組結(jié)構(gòu)表示。這個統(tǒng)一的數(shù)組稱之為簡化關系數(shù)組(SimplificationRelationshipArray)。2二次搜索利用簡化關系數(shù)組可以快速地確定植物冠層的細節(jié)層次模型。對于場景中的每棵植物,首先根據(jù)它與相機之間的距離,以及相機的參數(shù)設置(如視角),把用戶給定的像素誤差l轉(zhuǎn)換成空間誤差e。然后根據(jù)此空間誤差e,從對應的植物樣本的簡化關系數(shù)組中提取出適合的細節(jié)層次模型。只需對簡化關系數(shù)組進行兩次簡單的二次搜索就能得到滿足空間誤差要求的細節(jié)層次模型。其中第一次搜索尋找數(shù)組中第一個滿足條件e,〈e的節(jié)點,該節(jié)點記為N;第二次搜索尋找數(shù)組中第一個滿足條件e^〉e的節(jié)點,該節(jié)點記為M。第一次搜索在整個數(shù)組內(nèi)進行,而第二次搜索的范圍為節(jié)點N到數(shù)組的第一個節(jié)點。由于簡化關系數(shù)組同時滿足emin和^降序排序,因此位于節(jié)點M和N之間的節(jié)點滿足條件£G[e^,ej,所以它們構(gòu)成了當前的細節(jié)層次模型,其中每個節(jié)點都代表著一片葉片。相對于二叉樹遍歷,采用二次搜索確定細節(jié)層次模型的效率非常高。此外,通過利用相鄰幀之間的關聯(lián)性,該過程還能得到進一步的加速。在對場景進行漫游時,視點通常是逐漸變化的。因此同一棵植物在相鄰兩幀中的細節(jié)層次模型變化不會很大。換句話說,同一植物冠層在相鄰兩幀中的兩個細節(jié)層次模型在簡化關系數(shù)組中對應的起始位置(M)和終止位置(N)都相差不大。利用這點可以縮小搜索范圍,提高搜索的效率。實驗中,每棵植物都保存三個數(shù)值My^和^,它們分別記錄了上一幀的M,N和e值。當繪制新的一幀圖像時,首先比較當前的空間誤差e與^的大小關系,然后根據(jù)結(jié)果進行不同的處理。結(jié)果有如下三種情況參如果e=ey則M=MyN=Ny不需要重新搜索。參如果e>^,則首先進行第一次搜索,搜索條件為e幽〉"搜索范圍為節(jié)點M工到數(shù)組的第一個節(jié)點,搜索結(jié)果記為M。然后再在節(jié)點M到節(jié)點&中進行第二次搜索,尋找第一個滿足條件emax<e的節(jié)點,第二次搜索結(jié)果為N。參如果e<^,則首先進行第一次條件為e,〈e的搜索,搜索范圍為節(jié)點^到數(shù)組的最后一個節(jié)點,搜索結(jié)果為N。然后再在節(jié)點N和M工之間進行條件為e^〉e的第二次搜索,搜索結(jié)果為M。由上述方法提取了適合的細節(jié)層次模型后,可根據(jù)構(gòu)成此模型的所有節(jié)點的SN值,得到一組對應的頂點索引編號。把這一組頂點索引編號存入另一個數(shù)組,并從CPU傳輸給GPU,借助0penGL,就能完成繪制。葉片的幾何信息在繪制之初已送入GPU內(nèi)存,因此在繪制過程中,幾何數(shù)據(jù)不需要進行傳輸,但頂點索引編號的傳輸仍會增加時間消耗,降低繪制的速度。幸運的是,由于各細節(jié)層次模型的構(gòu)成節(jié)點在簡化關系數(shù)組中是連續(xù)分布的。利用這一點,頂點索引編號的傳輸同樣可以得到避免。在預處理過程中,可根據(jù)簡化關系數(shù)組構(gòu)建一個新的數(shù)組,該數(shù)組稱之為索引數(shù)組(IndexArray)。它按照簡化關系數(shù)組中的節(jié)點的順序記錄了簡化關系數(shù)組中每個節(jié)點的頂點索引編號。因此這兩個數(shù)組存在著一一對應關系。在繪制開始時,把幾何信息和索引數(shù)組都存入GPU內(nèi)存中,而把簡化關系數(shù)組存入CPU內(nèi)存中。當給定視點后,首先利用簡化關系數(shù)組通過兩次二次搜索提取適合的細節(jié)層次模型,即得到M和N。再找出這兩個值在索引數(shù)組中對應的位置,記為M'和N'。一旦得到M'和N',就能在0penGL的協(xié)助下完成繪制。在這種情況下,CPU和GPU幾乎不需要任何的數(shù)據(jù)傳輸,因此繪制效率很高。即使是繪制數(shù)萬棵樹木組成的森林,也能達到實時的要求。五、基于葉片密度的多分辨率模型第四節(jié)中介紹的方法可以根據(jù)樹木與視點之間的距離,對樹冠提取出合適的細節(jié)層次模型。樹距離視點越遠,描述樹冠的細節(jié)層次模型越粗糙。這樣提取出的細節(jié)層次模型中,位于樹冠各處的器官的表達精度是一樣的。這是不合理的,因為不同位置的冠層器官對繪制結(jié)果圖像的貢獻是不一樣的。本算法在葉片密度的基礎上,對樹冠建立允許多種分辨率共存的模型。最終提高樹冠整體的數(shù)據(jù)壓縮比,同時保證繪制圖像的質(zhì)量。葉片在冠層中的分布是不均勻的,而人類的眼睛對于冠層中葉片稀疏程度不同的區(qū)域的敏感程度也不一樣。對于葉片茂密的地方,人類的視覺不敏感。即使這些地方發(fā)生了變化,人們也不一定感覺得出。而對于葉片稀疏的地方,人們則比較敏感。這些地方一旦13發(fā)生改變,通常能立刻覺察出來。利用人類視覺的這種特性,根據(jù)葉片的分布情況可以建立冠層的多分辨率模型,使得葉片茂密的地方比稀疏的地方的簡化程度更高。為描述葉片在冠層中的分布情況,本算法提出了葉片密度的概念。葉片A的密度A=A(A,p)定義為葉片A臨域內(nèi)葉片的數(shù)目,其中葉片A的臨域定義為球心位于葉片A的中心,半徑為p的球體。判斷一片葉片是否落入另一片葉片的臨域內(nèi),需要判斷葉片多邊形各個頂點與對應球體的位置關系。為了簡化計算,每片葉片由其中心點代替。算法中,球體半徑P為常數(shù),因此葉片A的密度可簡寫為A=A(入)。得到各葉片的密度后,需進行歸一化操作,使得它們的值屬于[1,n]。其中參數(shù)n由用戶定義。在實際應用中,取n=2。歸一化操作為簡單的線性變換,公式如下A'(A)=[n-l]X[A(入)-AmiJ/[Amax-AmiJ+l其中Amin=min{A(A);AGA},Amax=max{A(A);AGA},A是所有葉片的集合。對于在葉片合并操作或者線合并操作中新產(chǎn)生的葉片,而葉片合并操作中新生成的葉片的密度定義為參與合并的兩片葉片的加權(quán)平均值,其中權(quán)重由葉片的合并次數(shù)決定,葉片的合并次數(shù)記錄著被它合并的原始葉片的數(shù)目。其密度可由下面的公式得到A,(x)=(G(y》XA,(y》+G(y2)XA,(y2))/(G(y》+G(y2))其中是x新生成的葉片^和^是參與合并的兩片葉片,G(y》和G(y》分別是葉片y工和^的合并次數(shù)。歸一化操作完成后,可根據(jù)葉片密度調(diào)節(jié)樹冠中不同位置的葉片的允許的空間誤差。使得葉片茂密的地方采用大的空間誤差,而葉片稀疏的地方采用相對小的空間誤差。這樣在繪制時,位于茂密處的葉片的表示模型就比位于稀疏處的葉片更粗糙。葉片A經(jīng)調(diào)節(jié)后的空間誤差值e(A)可由下面的公式得到e(入)=eXA,(入)空間誤差的調(diào)節(jié)在實時繪制階段進行,每一幀都要計算一次。雖然采用密度調(diào)節(jié)后,每一幀需要繪制的多邊形數(shù)目會減少,從而縮短繪制時間。但調(diào)節(jié)運算本身也需消耗一定的時間。幸運的是,葉片密度和視點信息無關,它不因視點的改變而改變。因此基于葉片密度的調(diào)節(jié)不用限定在實時繪制階段進行。前面提到,在對二叉樹結(jié)構(gòu)進行遍歷時,判斷一片葉片是否屬于當前的細節(jié)層次模型的標準在于看它的簡化誤差e是否小于或等于空間誤差e。因此放大空間誤差e與縮小簡化誤差e的效果是一樣的。既然葉片密度與視點無關,就可以采用另一種方式——在預處理階段根據(jù)葉片密度調(diào)節(jié)葉片的簡化誤差。首先計算各葉片的密度,然后根據(jù)密度調(diào)節(jié)葉片的簡化誤差。調(diào)節(jié)過程結(jié)束后,即可刪除葉片密度信息。這樣不僅不會在繪制階段增加額外的計算,而且也不需要對葉片密度進行存儲。葉片A的簡化誤差e(A)可根據(jù)其密度值A'(A)通過下面的公式調(diào)節(jié)成為<formula>formulaseeoriginaldocumentpage14</formula>由公式可知,A'(A)越大,葉片A的簡化誤差就越小,這就意味著繪制時,葉片入的簡化程度會越高。樹冠中位于不同位置的葉片也就因密度的不同而擁有不同的細節(jié)層次。密度調(diào)節(jié)對二叉樹結(jié)構(gòu)轉(zhuǎn)換成線性數(shù)組結(jié)構(gòu)不影響。在預處理階段,當對各葉片的簡化誤差根據(jù)對應的密度進行調(diào)節(jié)后,葉片的簡化信息可按照調(diào)節(jié)后的簡化誤差利用第四節(jié)中介紹的方法存儲在簡化關系數(shù)組中。實驗結(jié)果與結(jié)論用C語言實現(xiàn)了本發(fā)明所描述的方法,并用于了幾種常見針葉的簡化。所有的實驗都是在一臺Pentium(R)3.4G、1GB內(nèi)存、GeForce8600GT顯卡、操作系統(tǒng)為Windowsxp的PC機上完成的,顯示部分使用了標準的0penGL圖形函數(shù)庫。附圖9顯示了本算法簡化復雜葉片的整個過程。隨著用戶給定的像素誤差不斷增大,葉片的表示從網(wǎng)格模型逐漸轉(zhuǎn)變成為四邊形。其中標示為紅色的頂點是角點,它們在簡化過程中幾何位置保持不變。附圖10顯示了一棵具有681,200片葉片的40歲黑楊樹的細節(jié)層次逐漸遞減的四個模型。這四個模型的壓縮比分別為100%、5.2%、0.25%和0.01%??梢钥闯觯词巩斎~片數(shù)量很少時,樹冠外形仍能很好地保持。為了顯示本發(fā)明中細節(jié)層次模型提取算法以及GPU支持對繪制速度的影響,本發(fā)明以白楊樹模型(圖11(a))為例進行了實驗。首先對白楊樹樹冠的細節(jié)層次進行量化,使得每個細節(jié)層次采用0到1之間的實數(shù)表示(見圖11(b)冠層細節(jié)層次模型量化成內(nèi)的實數(shù))。其中0表示樹冠最精確的模型,即原始模型;1表示最粗糙的模型。然后對這棵白楊樹采用四種不同的繪制方式,并測量每種方式在提取和繪制白楊樹樹冠的不同的細節(jié)層次模型時所消耗的時間。其中方式1為傳統(tǒng)方法,它采用二叉樹遍歷法提取樹冠的細節(jié)層次模型,并且不支持GPU加速,所有的數(shù)據(jù)都保存在CPU內(nèi)存中。因此在繪制每一幀時,都需要把這一幀需要繪制的幾何信息從CPU傳到GPU。方式2和方式3為半GPU支持。葉片的幾何信息,即頂點數(shù)組在繪制之初存入GPU內(nèi)存,因此在繪制時不需要在CPU和GPU中傳輸幾何數(shù)據(jù)。這兩種方式的區(qū)別在于它們采用了不同的細節(jié)層次模型提取算法。方式2和方式1的一樣,采用二叉樹遍歷法;方式3則采用了本發(fā)明中介紹的方法。方式4和方式3的細節(jié)層次模型提取算法一樣,但方式4為全GPU支持,即在繪制之初,頂點數(shù)組和索引數(shù)組都保存在GPU內(nèi)存中。因此這種方式在繪制過程中CPU和GPU之間幾乎不需要進行數(shù)據(jù)傳輸。這四種方式的統(tǒng)計結(jié)果見圖11(c)四種繪制方式的時間消耗曲線。從比較中可看出,方式4的效率最高。相對于傳統(tǒng)方法,即方式1,方式4對繪制速度的提高達到100倍以上。此次實驗還測量了這四種繪制方式在繪制白楊樹樹冠時的CPU和GPU內(nèi)存的消耗情況。統(tǒng)計結(jié)果,包括原始樹模型的葉片的數(shù)目,原始樹模型的幾何數(shù)據(jù)的大小,CPU內(nèi)存消耗,以及GPU內(nèi)存消耗,見表l。表1:四種繪制方式的CPU、GPU內(nèi)存消耗情況<table>tableseeoriginaldocumentpage15</column></row><table>附圖12為一棵35歲秋天的挪威楓樹分別采用和不采用葉片密度調(diào)節(jié)的結(jié)果比較。其中圖12(a)為原始模型,它包含73,600片葉子,可看出樹葉的分布是不均勻的,圖12(b)(e)都為簡化模型,它們對應的葉片數(shù)分別為11,960、8,399、6,440和6,385。圖12(b)和圖12(d)是不考慮密度影響的結(jié)果,圖12(c)和圖12(e)為對應的考慮了密度影響的結(jié)果。在比較中,圖12(b)和圖12(c)為一組,圖12(d)和圖12(e)為另一組。圖12(b)和圖12(c)的空間誤差是一樣的。這兩幅圖像的視覺質(zhì)量相當,但圖12(c)比圖12(b)的葉片的數(shù)目少。通過這組比較可知,在同一誤差條件下,考慮密度影響的簡化結(jié)果能在保證圖像質(zhì)量的前提下取得更高的幾何數(shù)據(jù)壓縮比率。圖12(d)和圖12(e)的葉片的數(shù)目相當,但是圖12(e)的圖像質(zhì)量明顯比圖12(d)好。這說明在葉片數(shù)量一致的條件下,考慮密度影響的簡化結(jié)果能更好地保持原始模型的幾何細節(jié)。附圖13是一棵25歲春天山楂樹的LOD模型。處于四個不同位置的山楂樹因與相機的距離不同而具有不同的細節(jié)層次。離視點越遠,樹冠中的葉片就越少。但它們的視覺效果相似。表2列出了這四棵樹的統(tǒng)計數(shù)據(jù),包括與相機之間的距離、葉片數(shù)目、以及相對于原始模型的壓縮比。表2:附圖13中四棵山楂樹的統(tǒng)計數(shù)據(jù)<table>tableseeoriginaldocumentpage16</column></row><table>圖14和圖15是一片由闊葉樹和針葉樹組成的混合林在兩個不同的視點條件下的繪制結(jié)果。這片秋天的森林包含22,560棵樹,這些樹由七棵植物樣本復制而來。這七棵植物樣本分別為10歲樟子松、12歲白楊、12歲菩提樹、15歲冬青樹、15歲山楂樹、20歲云南白楊以及35歲楓樹。未簡化前,描述該森林的樹葉的多邊形的數(shù)目為868,850,760,樹枝的多邊形數(shù)目為7,299,027,168。這樣的數(shù)據(jù)量超過了CPU和GPU所承受的范圍。圖14是以步行的方式對森林漫游時看到的景色。此時有1,452棵植物在視錐體內(nèi)。這些樹的樹葉由18,081,048個多邊形和8,996,680根線表示,因此可知葉片數(shù)據(jù)的壓縮比為3.1%。繪制結(jié)果的圖片大小為1280X1024,繪制速度為12.82幀/秒。圖15則是以鳥瞰方式對森林進行漫游時所看到的景色。圖15中有1,058棵樹,它們的葉片由7,318,239個多邊形和235,704線表示,因此壓縮比為0.87%。繪制速度為21.28幀/秒。圖14和15的陰影效果均在后處理階段完成。以上所述,僅為本發(fā)明中的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi),可理解想到的變換或替換,都應涵蓋在本發(fā)明的包含范圍之內(nèi),因此,本發(fā)明的保護范圍應該以權(quán)利要求書的保護范圍為準。權(quán)利要求一種對復雜葉片的快速簡化和繪制方法,其特征在于,包括下列步驟,其中步驟S1-S7在預處理階段完成,步驟S8-S9在實時繪制階段完成步驟S1首先輸入樹模型,提取樹葉信息;步驟S2對葉簇內(nèi)的每一片葉片進行判斷,判斷葉片是否為,如果是,則把葉片復雜的網(wǎng)格模型簡化成四邊形,完成葉片的第一個層次簡化;如果不是復雜葉片,則執(zhí)行步驟S3;步驟S3通過迭代的葉片合并操作把葉簇內(nèi)的四邊形葉片逐漸簡化成為一個四邊形,該四邊形稱之為葉簇代表四邊形,完成葉片的第二個層次簡化;步驟S4迭代地對樹冠中的代表四邊形葉片執(zhí)行葉片合并操作,直到整個樹冠用一個四邊形表示,完成葉片的第三個層次簡化,第三個層次采用距離限制法對簡化過程進行加速;步驟S5計算所有葉片的密度,并根據(jù)葉片密度調(diào)節(jié)處于樹冠中不同位置的葉片的簡化誤差;步驟S6采用數(shù)組結(jié)構(gòu)把葉片的幾何信息和簡化信息分別保存到兩個數(shù)組中;步驟S7把保存了幾何信息和簡化信息的兩個數(shù)組作為不同文件保存到硬盤中;步驟S8把保存了葉片的幾何信息和簡化信息的文件從硬盤分別讀入CPU和GPU內(nèi)存,并設定相機信息和像素誤差;步驟S9根據(jù)當前視點信息和像素誤差,通過對保存了簡化信息的數(shù)組進行兩次二次搜索,確定冠層合適的細節(jié)層次模型;對相應細節(jié)層次模型進行繪制,得到繪制圖像。2.按權(quán)利要求1所述的方法,其特征在于,所述簡化成四邊形是采用改進的點對收縮算法把葉片復雜的網(wǎng)格模型簡化成四邊形。3.按權(quán)利要求2所述的方法,其特征在于,對每片葉片指定兩個頂點為角點,角點在簡化過程中幾何位置保持不變,其中第一角點定義為距離其承接莖最遠的頂點,第一角點是葉尖所對應的點;第二角點是與葉柄相連的點,通過第一角點根據(jù)葉片的對稱性得到第二角點。4.按權(quán)利要求1所述的方法,其特征在于,所述采用距離限制法對簡化進行加速時,首先由用戶設定一個距離閾值Q,然后求取距離小于或等于閾值的葉對,為有效葉對,并把最優(yōu)葉對的篩選限定在有效葉對中進行。5.按權(quán)利要求4所述的方法,其特征在于,在求取有效葉對時,采用葉片的中心點代替葉片,并對中心點采用改進的八叉樹結(jié)構(gòu)進行細分;該八叉樹結(jié)構(gòu)首先計算中心點的包圍盒,然后對它不斷地細分;每一次把盒子細分成八份,每次劃分都在盒子最長的那條邊進行,并且每次劃分后,因劃分而得到的兩個盒子在對應邊上增大Q/2;這樣的細分不斷進行,直到盒子里的中心點的數(shù)目小于或等于用戶設定的閾值L,或者盒子有一條邊的長度不再大于閾值Q。6.按權(quán)利要求l所述的方法,其特征在于,所述葉片A的密度A=A(A,p)定義為葉片A臨域內(nèi)葉片的數(shù)目,其中A代表一片葉片的編號,葉片A的臨域定義為球心位于葉片A的中心,半徑為P的球體;按照此定義求出原始模型中的原始葉片的密度后,再進行歸一化操作,使得原始葉片的密度值屬于[i,n],其中參數(shù)n由用戶定義;而葉片合并操作中新生成的葉片的密度定義為參與合并的兩片葉片的加權(quán)平均值,其中權(quán)重由葉片的合并次數(shù)決定,葉片的合并次數(shù)記錄著被它合并的原始葉片的數(shù)目。7.按權(quán)利要求1所述的方法,其特征在于,所述用數(shù)組結(jié)構(gòu)存儲葉片的簡化信息,該數(shù)組結(jié)構(gòu)支持GPU加速,它滿足以下兩個條件(1).組成樹冠的任意的一個細節(jié)層次模型的各節(jié)點都是連續(xù)地存儲在數(shù)組中,即不同的細節(jié)層次模型都構(gòu)成數(shù)組中完整的一段;(2).—旦用戶給定像素誤差,只需對數(shù)組執(zhí)行兩次二次搜索就能確定冠層合適的細節(jié)層次模型。8.按權(quán)利要求7所述的方法,其特征在于,數(shù)組中每個節(jié)點被賦予三個值e^,e^和SN,其中e^是該節(jié)點的簡化誤差,e^是其父節(jié)點的簡化誤差,SN是該節(jié)點表示的葉片的序號;該數(shù)組由傳統(tǒng)二叉樹結(jié)構(gòu)變換而來,在把二叉樹轉(zhuǎn)換成數(shù)組的過程中,以emax的降序排列為主要規(guī)則,以emin的降序排列為輔助規(guī)則;當新加入的節(jié)點不滿足e^排序時,對不滿足條件的節(jié)點進行分裂,使其一分為二,最終使數(shù)組同時滿足emax和emin降序排序。9.按權(quán)利要求7所述的方法,其特征在于,兩次二次搜索的條件分別是e^〈e和e^〉"其中e是當前允許的空間誤差,并利用相鄰幀之間的關聯(lián)性來縮小搜索范圍。全文摘要本發(fā)明為一種對復雜葉片的快速簡化和繪制方法,輸入樹模型提取樹葉信息,對葉簇內(nèi)復雜葉片完成一層次簡化;迭代地葉片合并完作二層次簡化;迭代地對樹冠中的葉片合并操作完成葉片的三層次簡化;計算葉片密度;用數(shù)組結(jié)構(gòu)把葉片幾何和簡化信息分別保存到兩個數(shù)組中并讀取,根據(jù)當前視點和像素誤差,對保存簡化信息的數(shù)組進行二次搜索,確定冠層合適的細節(jié)層次模型繪制圖像。本發(fā)明適用于任意形狀的復雜葉片的簡化。利用距離限制提高簡化速度,實現(xiàn)植物冠層的細節(jié)層次模型的高效提取和繪制。通過密度因素構(gòu)建樹冠的多分辨率共存的模型提高繪制速度。本發(fā)明能保持樹冠的形狀,有效克服走樣現(xiàn)象,最終實現(xiàn)數(shù)萬棵植物構(gòu)成的森林的實時漫游。文檔編號G06T17/00GK101751694SQ20081023932公開日2010年6月23日申請日期2008年12月10日優(yōu)先權(quán)日2008年12月10日發(fā)明者張曉鵬,鄧擎瓊申請人:中國科學院自動化研究所