趙 凱,唐麗華,2,張姝婧
(1.浙江農(nóng)林大學(xué) 信息工程學(xué)院,浙江 杭州311300;2.浙江農(nóng)林大學(xué) 浙江省林業(yè)智能監(jiān)測(cè)與信息技術(shù)研究重點(diǎn)實(shí)驗(yàn)室,浙江 杭州311300)
近年來(lái),樹(shù)木三維可視化建模成為虛擬植物研究領(lǐng)域的熱點(diǎn)課題之一,在數(shù)字植物園建設(shè)、虛擬景觀(guān)規(guī)劃設(shè)計(jì)、三維游戲開(kāi)發(fā)和影視動(dòng)畫(huà)設(shè)計(jì)等諸多領(lǐng)域都有著廣闊的應(yīng)用前景。樹(shù)木包含的器官較多,其結(jié)構(gòu)較為精細(xì)且無(wú)規(guī)則性,尤其是枝干和樹(shù)葉,具有復(fù)雜的幾何拓?fù)浣Y(jié)構(gòu)。這使得計(jì)算機(jī)對(duì)其進(jìn)行建模會(huì)比較困難,所以如何快速、精準(zhǔn)建立具有高真實(shí)感的樹(shù)模型是主要需要解決的問(wèn)題[1]。目前,植物三維建模的方法主要分為3種:基于圖形的方法、基于圖像的方法和基于專(zhuān)業(yè)軟件的方法。3種建模方法各有優(yōu)劣,基于圖形方法的模型比較注重植物生理的形態(tài)結(jié)構(gòu),主要包括基于分形理論的迭代函數(shù)系統(tǒng)(iterated function system)和L系統(tǒng)(L-system),還有粒子系統(tǒng)(partial system)和隨機(jī)過(guò)程生長(zhǎng)法等,建立模型效率較高且構(gòu)建方式較為靈活,但是難以對(duì)形態(tài)結(jié)構(gòu)特別復(fù)雜的植物進(jìn)行三維建模。圖像方法則是針對(duì)圖形方法的不足提出的,它是根據(jù)輸入計(jì)算機(jī)的一幅或多幅2維圖像來(lái)完成對(duì)植物形體的三維重建,但其建模過(guò)程較為復(fù)雜,生成的模型形態(tài)結(jié)構(gòu)固定,缺乏靈活性。另外,由于易受室外環(huán)境的影響,如遮擋或季節(jié)因素導(dǎo)致圖像數(shù)據(jù)的缺失而難實(shí)現(xiàn)可視化建模[2-3]?;谲浖5姆椒?,目前比較流行的軟件有SpeedTree,Xfrog,3dsMax以及Maya等[4-7],雖然生成的模型真實(shí)感是所有方法里最好的,并且能實(shí)現(xiàn)具有復(fù)雜形態(tài)結(jié)構(gòu)的植物體的建模,但是該建模方法要求用戶(hù)具備較扎實(shí)的植物生理學(xué)知識(shí)。綜合比較上述方法,出于能夠快速、高仿真、可交互建立具有真實(shí)植物空間結(jié)構(gòu)信息的三維樹(shù)木模型的目的,本研究針對(duì)現(xiàn)有建模方法的缺陷和不足,利用基于改進(jìn)的分形迭代函數(shù)系統(tǒng)的建模方法,設(shè)計(jì)并實(shí)現(xiàn)了單樹(shù)建模軟件系統(tǒng),通過(guò)提取特征參數(shù)和變量控制系數(shù)來(lái)控制樹(shù)體模型生成,所建立的模型能較好地反應(yīng)樹(shù)木生理生態(tài)結(jié)構(gòu),還克服了建模流程復(fù)雜、模型真實(shí)感弱、交互性差等缺點(diǎn)。
本研究涉及的樹(shù)體三維可視化建模僅考慮地上部分。樹(shù)體地上部分的器官主要可分為枝干、樹(shù)葉、花朵、果實(shí)。枝干的形態(tài)結(jié)構(gòu)復(fù)雜多變,根據(jù)生長(zhǎng)層次的不同可將枝干按層級(jí)劃分[8]:主干、一級(jí)分枝、二級(jí)分支枝和三級(jí)分枝……。決定分枝形態(tài)和空間格局的因素又可分為:分枝長(zhǎng)度、分枝基徑、分枝著枝角(與上級(jí)枝干的夾角)、分枝方位角(沿上級(jí)枝干旋轉(zhuǎn)的角度)、彎曲度等。
一般來(lái)講,園林植物外部形態(tài)可以由樹(shù)枝的分枝模式來(lái)區(qū)分。分枝模式主要分為兩大類(lèi):主(單)軸分枝和合軸分枝。主軸分枝主要表現(xiàn)為其主莖上的頂芽不斷向上生長(zhǎng)形成明顯的主干,主莖上的腋芽形成側(cè)枝,側(cè)枝上再生成各級(jí)分枝,但它們的生長(zhǎng)均不超過(guò)主莖,形態(tài)結(jié)構(gòu)抽象圖如圖1所示。合軸分枝則主要表現(xiàn)為莖的頂芽發(fā)育到一定時(shí)候停滯或死亡,由其下方腋芽取而代之形成強(qiáng)壯的側(cè)枝,一段時(shí)間后生長(zhǎng)優(yōu)勢(shì)又轉(zhuǎn)向下一級(jí)分枝,因此沒(méi)有明顯的主干,形成了多個(gè)彎曲的主軸,整個(gè)樹(shù)冠呈開(kāi)張狀態(tài)[5]。
在模型構(gòu)建中,本研究將可視化建模過(guò)程拆分成3個(gè)部分:樹(shù)體的枝干建模、葉片建模以及模型和場(chǎng)景渲染。將建模過(guò)程分步處理,不僅可以簡(jiǎn)化整個(gè)建模的流程,還可以提高模型的重用性,方便在植物模型生成后進(jìn)行局部調(diào)整[10]。這使得建模系統(tǒng)具有很好的交互性,用戶(hù)只需通過(guò)調(diào)節(jié)幾個(gè)部位對(duì)應(yīng)的屬性值,就可以根據(jù)自己的需要設(shè)計(jì)生成相應(yīng)的樹(shù)枝形態(tài)和樹(shù)葉形態(tài)。
1.2.1 構(gòu)建枝段元 將樹(shù)枝分級(jí)處理,每一級(jí)樹(shù)枝可以理解成由不同的枝段構(gòu)成,而每一個(gè)枝段又可以理解為由若干個(gè)不同的枝段元連接構(gòu)成——枝段元是構(gòu)成枝干模型的最小單位。在自然界里植物枝干的形狀幾乎都近似圓臺(tái)形,因此,有研究者用圓臺(tái)模型模擬三維分形樹(shù)的樹(shù)木枝段元[9]。但是經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),如果直接簡(jiǎn)單調(diào)用OpenGL圖形庫(kù)里的圓臺(tái)而不做處理,那么就會(huì)導(dǎo)致樹(shù)枝彎曲時(shí)枝段元拼接處出現(xiàn)缺口(圖2)。經(jīng)實(shí)驗(yàn)發(fā)現(xiàn):用多邊形棱臺(tái)進(jìn)行枝干模擬可以較好地處理枝段元的拼接問(wèn)題,所以本研究采用正六邊形棱臺(tái)近似模擬枝干。實(shí)驗(yàn)結(jié)果顯示枝干模型的平滑性較好且未出現(xiàn)連接缺口。其原理是先通過(guò)定義點(diǎn)的初始位置和終點(diǎn)位置,然后根據(jù)定義的位置繪制2個(gè)正六邊形,最后把2個(gè)正六邊形的12個(gè)頂點(diǎn)相互進(jìn)行連接[11]。因此,該方法很好地解決了枝干連接的問(wèn)題,同時(shí)也提高了模型的渲染效率。枝段元由4個(gè)參數(shù)來(lái)進(jìn)行控制,分別是:Radius,Length,Angle,Twist。其中Radius表示枝段元的底面半徑,Length表示枝段元的高度,而Angle表示枝段元上底面、下底面中心連線(xiàn)繞z軸(Open-GL三維坐標(biāo)系)的夾角,Twist表示枝段元上底面、下底面中心連線(xiàn)繞x軸的角度,兩者共同作用來(lái)控制枝干生長(zhǎng)方向,效果如圖3(A)所示?;谝陨现Χ卧獙傩钥刂?,若干個(gè)枝段元通過(guò)偏轉(zhuǎn)、彎曲、連接就可以組成一條枝段,如圖3(B)所示,而枝段又受SideAngle即側(cè)枝著枝角度屬性控制。
圖1 樹(shù)體形態(tài)結(jié)構(gòu)Figure 1 Morphological structure of tree body
圖2 圓臺(tái)段元拼接處缺口Figure 2 Connection gap of elements of circular truncated cone
圖3 枝段元抽象圖(A)枝段抽象圖(B)Figure 3 Abstract graph of branch elements (A),an abstract graph of branches (B)
1.2.2 枝干建模 由于樹(shù)枝與樹(shù)枝之間存在相似的生理特征和結(jié)構(gòu)特征,也就是自相似性,而分形方法恰好能夠較好地描述這一特征,那么可以將三維樹(shù)木的枝干生成過(guò)程看成是一個(gè)分形迭代過(guò)程。將當(dāng)前樹(shù)枝段元的參數(shù)數(shù)據(jù)經(jīng)過(guò)一定的算術(shù)運(yùn)算后所得的結(jié)果作為次級(jí)枝段元的參數(shù)數(shù)據(jù),然后再進(jìn)行遞歸調(diào)用得到再下一級(jí)枝段元的參數(shù)。按這種算術(shù)關(guān)系多次迭代后再將枝段元首尾連接即可實(shí)現(xiàn)一根一定長(zhǎng)度的由粗變細(xì)且具有彎曲度的枝條[12]。利用這種遞歸調(diào)用思想最終可生成具有自相似結(jié)構(gòu)的三維分形樹(shù)木。用Radius′,Length′,Angle′,Twist′分別表示次級(jí)枝段元的屬性,可以得到如下關(guān)系式:
關(guān)系式(1)中:LenScale表示枝段元長(zhǎng)度控制系數(shù),RadScale表示枝段元半徑控制系數(shù),C1和C2分別表示一個(gè)固定常數(shù)。然而基于以上建模方法,其生成的枝干模型是規(guī)則的、有序的,這與實(shí)際自然界的樹(shù)枝生長(zhǎng)形態(tài)不符,因?yàn)槭茏匀画h(huán)境的影響,雖然整體上具有自相擬性,但每個(gè)分支在粗細(xì)長(zhǎng)度、彎曲程度、著枝角度和方位角度等方面都是有所差異的。為了更好地還原真實(shí)情況,在迭代生成枝干的過(guò)程中加入了隨機(jī)干擾因子,由關(guān)系式(1)可得關(guān)系式(2):
1.2.3 樹(shù)葉建模 由于1株樹(shù)的葉子數(shù)量比較龐大,并且樹(shù)葉的邊緣信息和葉脈紋路差異巨大,若對(duì)每一片葉子進(jìn)行幾何建模不僅會(huì)增加計(jì)算量,同時(shí)也會(huì)比較耗時(shí),所以本研究采用通用的方法——紋理映射。該方法只需利用OpenGL先設(shè)置一個(gè)多邊形模板作為樹(shù)葉的模板,然后將樹(shù)葉紋理(樹(shù)葉圖片)映射到模板上,最后加以渲染就可以得到較為真實(shí)的樹(shù)葉模型。通過(guò)設(shè)置樹(shù)葉(多邊形模板)屬性參數(shù),如葉片大?。↙eafSize),葉片著枝角(LeafAngle),葉片方位角(LeafTwist)等就可獲得形態(tài)各異的樹(shù)葉,從而改變樹(shù)模型的局部形態(tài)。
第1步:先設(shè)定起始枝段元參數(shù),如枝段元的長(zhǎng)度(Length),底面半徑(Radius),夾角(Angle),旋轉(zhuǎn)角(Twist), 長(zhǎng)度控制系數(shù)(LenScale), 半徑控制系數(shù)(RadScale)以及樹(shù)枝干深度系數(shù)(TreeDepth), 也就是遞歸算法深度,即遞歸調(diào)用的次數(shù)。第2步:根據(jù)第1步設(shè)定的參數(shù)繪制起始枝段元模型,并貼上紋理。第3步:上一步的長(zhǎng)度和半徑乘以控制系數(shù)(LenScale和RadScale)得到本次應(yīng)繪制的枝段元的長(zhǎng)度和半徑,貼上紋理,并緩存此次結(jié)果作為下次執(zhí)行遞歸函數(shù)時(shí)需調(diào)用的參數(shù),同時(shí)樹(shù)枝干深度系數(shù)(TreeDepth)減小1個(gè)單位。第4步:判斷TreeDepth是否等于0,若TreeDepth為 0,則停止繪制枝段元,轉(zhuǎn)而開(kāi)始繪制樹(shù)葉,設(shè)置葉子的數(shù)量、大小以及旋轉(zhuǎn)角和夾角等屬性參數(shù),添加紋理并生成樹(shù)葉。若 TreeDepth>0, 則以當(dāng)前段元長(zhǎng)度(Length), 半徑(Radius), 夾角(Angle)和旋轉(zhuǎn)角(Twist)作為參數(shù)進(jìn)入遞歸函數(shù),繼續(xù)繪制枝段元。第5步: 重復(fù)第3步到第4步操作,直到樹(shù)的枝干深度系數(shù)達(dá)到生成樹(shù)葉的遞歸系數(shù)值,程序運(yùn)行結(jié)束跳轉(zhuǎn)生成1株完整的三維分形樹(shù)。
//初始值設(shè)置
floatAngle=15.0f;//枝段元偏移角度
floatLateralAngle=10.0f;//側(cè)枝段元偏移角度
floatScaleLen=0.85f;//長(zhǎng)度衰減系數(shù)
floatScaleRad=0.75f;//半徑衰減系數(shù)
floatTwist=65.0f;//側(cè)枝旋轉(zhuǎn)角度(方位角)
floatSideAngle=60.0f;//側(cè)枝與上級(jí)枝的分叉角度
floatSideScaleDepth=0.80f;//側(cè)枝深度控制系數(shù)
floatSideScaleSize=0.90f;//側(cè)枝粗細(xì)長(zhǎng)度衰減系數(shù)
//枝干段元迭代函數(shù)
voidBuildBranch (intCount,GLfloatLeafSize)
{
if (Count)
{
if (Next)
{
Next->SetAngle (Angle*random2 ()) ;
Next->SetTwist(Twist+ Twist*random1(1,3));
Next->SetLength(ScaleLen*Length);//長(zhǎng)度衰減系數(shù)×長(zhǎng)度
Next->SetRadius(ScaleRad*Radius);//半徑衰減系數(shù)×半徑
Next->BuildBranch(Count-1,LeafSize);
}
}
if (Count>=1)
{//建側(cè)枝
SideBranch=newCBranch;
ASSERT(SideBranch);
if(SideBranch)
{
SideBranch->LeafScale=LeafSize/CSegment:SideScale;
SideBranch->Base=this;
SideBranch->Rebuild(max(1.0f,min(Count,Count*SideScaleDepth)));
}
}
else
{//建樹(shù)葉
Leaves=newCLeaf;
Leaves[0].Angle=LeafAngle;
Leaves[0].Scale=LeafSize;
Leaves[0].Twist=Twist+(Twist+180);
}
}
為了實(shí)現(xiàn)基于OpenGL的交互式樹(shù)木三維可視化建模系統(tǒng),本研究選用Visual Studio 2010作為開(kāi)發(fā)工具,用Visual C++語(yǔ)言編程實(shí)現(xiàn),通過(guò)配置OpenGL運(yùn)行環(huán)境,運(yùn)用OpenGL提供的圖形圖像技術(shù)以及基于改進(jìn)的分形迭代算法繪制虛擬三維樹(shù)木,實(shí)現(xiàn)通用性高、真實(shí)感強(qiáng)且人機(jī)交互性良好的虛擬三維樹(shù)木模型的自動(dòng)化生成系統(tǒng)。運(yùn)行硬件環(huán)境具體為:Windows 10 64位操作系統(tǒng),8G內(nèi)存,Inter Core i5-4200h處理器,NVIDIAGeForceGTX 950M顯卡。
根據(jù)1.2節(jié)模型構(gòu)建內(nèi)容可知,若知道枝段元底面半徑就可以依據(jù)三角函數(shù)定理得到正六邊形下底面每個(gè)頂點(diǎn)在三維坐標(biāo)系中的位置,由枝段元的高度和半徑衰減系數(shù)又能得到上底面六邊形頂點(diǎn)坐標(biāo),也就是次級(jí)枝段元下底面六邊形各頂點(diǎn)坐標(biāo)。利用OpenGL圖形繪制技術(shù)就能繪制出六邊形棱臺(tái)用以表示枝段元。表1列出了六邊形底面各點(diǎn)在三維坐標(biāo)系的具體取值,圖4是六邊形各坐標(biāo)點(diǎn)的位置及對(duì)應(yīng)紋理貼圖的示意圖。
由于枝段存在彎折和偏轉(zhuǎn)的特征,坐標(biāo)點(diǎn)位置就要根據(jù)夾角和旋轉(zhuǎn)角加以變更,具體變更公式見(jiàn)關(guān)系式(3)。各坐標(biāo)點(diǎn)位置確定后即可通過(guò)OpenGL的紋理貼圖函數(shù)glNormal3f(),glTexCoord2f(),glVertex3f()加以貼圖渲染,基于以上操作即可得到帶紋理效果的枝干,具體效果如圖5。
圖4 坐標(biāo)點(diǎn)位置(A)和紋理貼圖(B)Figure 4 Points position (A) and texture map(B)
表1 各坐標(biāo)點(diǎn)取值Table 1 Value of each point
圖5 樹(shù)干模擬效果圖(A)及枝干模擬效果圖(B)Figure 5 The simulation pictures of trunks(A) and branches (B)
本研究用圖片貼圖的方法模擬樹(shù)葉,素材取自自然界真實(shí)樹(shù)葉的照片,格式選擇24位圖的bmp格式。為了提高樹(shù)葉的真實(shí)感,需要將除葉片以外的圖像像素全部消除或隱藏,所以這里采用了BMP透明處理技術(shù),其方法原理是獲取一張像素為2n×2n,格式為bmp的位圖,將圖片中所有需要透明處理的地方的Alpha值設(shè)置為0.0,不需要透明處理的地方的Alpha值設(shè)置為1.0,然后設(shè)置Alpha的測(cè)試通過(guò)條件為: “大于0則通過(guò)”。如一張背景為黑色的樹(shù)葉照片,將像素為黑色的Alpha值設(shè)為0.0,除黑色以外的Alpha值設(shè)為1.0,繪制樹(shù)葉紋理時(shí)使用OpenGL圖庫(kù)自帶的glEnable(GL_ALPHA_TEST)和glAlphaFunc(GL_GREATER,0)函數(shù)就可以使樹(shù)葉完整的顯示出來(lái),從圖6可以看到經(jīng)BMP透明技術(shù)處理后的樹(shù)葉模型效果。
為了增加樹(shù)木繪制的真實(shí)感,本研究還增加了光照和陰影效果。在OpenGL里光照模型是由光源、材質(zhì)和光照環(huán)境決定的,通過(guò)設(shè)置光源位置(LightPosition),環(huán)境光(LightAmbient)和反射光(LightDiffuse)等屬性值,共同作用來(lái)模擬現(xiàn)實(shí)光照效果?;诠庹站涂梢岳L制陰影效果,目前比較流行的陰影模擬方法是采用Shadow Maping算法,其生成陰影的原理為:shadow map將場(chǎng)景渲染2次,第1次是從燈光的角度(把相機(jī)放到燈光位置)渲染場(chǎng)景,然后存儲(chǔ)渲染的深度信息到一張紋理上。第2次再?gòu)挠^(guān)察者的角度來(lái)渲染,在第2次渲染時(shí)才渲染陰影,對(duì)于每個(gè)圖元的深度信息和第1次從燈光角度渲染的深度信息比較,如果當(dāng)前深度值大于第1次渲染的深度值,則說(shuō)明有物體在當(dāng)前片元和燈光之間,那么當(dāng)前片元在陰影區(qū)[13]。
圖6 經(jīng)bmp透明技術(shù)處理前 (A)和處理后(B)的樹(shù)葉模型Figure 6 Leaf model treatedbefore(A)and after(B) bmp transparent technology
為了增加樹(shù)體建模的靈活性,本研究將樹(shù)木模型參數(shù)做了可視化處理,即把涉及到樹(shù)木形態(tài)結(jié)構(gòu)的參數(shù)整合到一個(gè)參數(shù)控制面板上,這些參數(shù)總共包括了14項(xiàng):樹(shù)枝干深度系數(shù)(TreeDepth),枝干段元夾角(Angle),側(cè)枝段元夾角(LateralAngle),沿上級(jí)枝的旋轉(zhuǎn)角(Twist),與上級(jí)枝的夾角(SideAngle),枝干長(zhǎng)度衰減系數(shù)(LenScale),枝干半徑衰減系數(shù)(RadScale),側(cè)枝深度衰減系數(shù)(SideScaleDepth),側(cè)枝尺寸系數(shù)(SideScaleSize), 樹(shù)葉大?。↙eafSize), 樹(shù)葉偏轉(zhuǎn)角(LeafAngle), 樹(shù)影長(zhǎng)度(TreeShadowLen),枝影密度(BranchShadowDen)和葉影密度(LeafShadowDen)。當(dāng)改變其中一項(xiàng)參數(shù)后,樹(shù)體的形態(tài)變化將實(shí)時(shí)顯示在視圖區(qū)。另外,還增加了貼圖更換功能,當(dāng)點(diǎn)擊更換按鈕后可通過(guò)選擇文件夾里已有的貼圖文件來(lái)更換模型外部特征,進(jìn)一步增加了建模的靈活性。通過(guò)控制鍵盤(pán)前后左右按鍵和鼠標(biāo)左右鍵實(shí)現(xiàn)上下左右旋轉(zhuǎn)功能和前進(jìn)后退功能,有利于更細(xì)致的觀(guān)察。
樹(shù)干建模的參數(shù)主要受枝干深度系數(shù)、枝干段元夾角、側(cè)枝段元夾角、沿上級(jí)枝的旋轉(zhuǎn)角、與上級(jí)枝的夾角、枝干長(zhǎng)度衰減系數(shù)、枝干半徑衰減系數(shù)、側(cè)枝深度衰減系數(shù)、側(cè)枝尺寸衰減系數(shù)等9項(xiàng)參數(shù)控制,參數(shù)不同生成的樹(shù)木形態(tài)結(jié)構(gòu)就不同,由此可以生成形態(tài)各異的三維樹(shù)木。為了適應(yīng)樹(shù)木模型的多變性,添加了樹(shù)皮更換功能。點(diǎn)擊控制面板上的 “樹(shù)皮更改”按鈕后(圖7A)彈出樹(shù)皮選擇窗口(如圖7B),選擇所需樹(shù)皮貼圖,點(diǎn)擊確認(rèn)按鍵后即可生成用戶(hù)所需的樹(shù)皮樣式。樹(shù)皮更改后的樹(shù)木模型如圖7C。
圖7 樹(shù)皮參數(shù)更改前(A)中(B)后(C)效果圖Figure 7 Pictures of before (A),middle(B) and after(C) the change of bark parameters
3.1.1 單軸樹(shù) 根據(jù)1.1節(jié)樹(shù)木形態(tài)結(jié)構(gòu)分析可知,單軸樹(shù)會(huì)有一根明顯的主干,圍繞主干生成側(cè)枝,主干和側(cè)枝的長(zhǎng)度、半徑自底向上呈現(xiàn)縮減趨勢(shì),所以需設(shè)置長(zhǎng)度和半徑縮減系數(shù)。為了模擬現(xiàn)實(shí)中彎曲狀態(tài),通過(guò)設(shè)置枝段元夾角等參數(shù)即可實(shí)現(xiàn),主要參數(shù)如表2所示,效果如圖8所示,稍微調(diào)節(jié)其中一個(gè)參數(shù)就可改變相應(yīng)樹(shù)形態(tài)。但是需注意的是TreeDepth和SideScaleDepth的屬性值不能同時(shí)設(shè)置到最大值,若設(shè)置過(guò)大,會(huì)引起枝干數(shù)量呈指數(shù)型增長(zhǎng),從而瞬間增加計(jì)算機(jī)顯卡的計(jì)算量并占用大量?jī)?nèi)存而造成卡頓。
3.1.2 合軸樹(shù) 合軸樹(shù)沒(méi)有明顯的主枝干,具有茂密的側(cè)枝,整個(gè)植物冠狀呈張開(kāi)形態(tài),所以只需根據(jù)上表的參數(shù)加以調(diào)整,利用分形迭代算法即可實(shí)現(xiàn)合軸樹(shù)的效果,主要參數(shù)如表3所示,效果如圖9所示。同樣,這里只需調(diào)節(jié)其中一個(gè)參數(shù)就可改變相應(yīng)樹(shù)形態(tài),TreeDepth和SideScaleDepth屬性值不能同時(shí)設(shè)置到最大值。
表2 單軸樹(shù)參數(shù)參考表Table 2 The parameter graph of a monoaxial tree
表3 合軸樹(shù)參數(shù)參考表Table 3 The parameter graph of a multiway tree
圖8 單軸樹(shù)效果圖Figure 8 Picture ofa monoaxial tree
圖9 合軸樹(shù)效果圖Figure 9 Picture ofa multiway tree
對(duì)于構(gòu)建好的枝干模型,根據(jù)樹(shù)葉建模和可視化模擬,添加樹(shù)葉后使得樹(shù)木進(jìn)一步增加了真實(shí)感,為了進(jìn)一步增加建模的靈活性,本研究將樹(shù)葉的大小和角度屬性進(jìn)行了交互式的設(shè)計(jì),通過(guò)調(diào)節(jié)控制面板對(duì)應(yīng)屬性值即可自動(dòng)調(diào)整樹(shù)葉在枝干上的分布特征。另外,為了適應(yīng)樹(shù)模型的多變性,也添加了樹(shù)葉更換功能,同樹(shù)皮更改一樣,點(diǎn)擊控制面板上的 “樹(shù)葉更改”按鈕后(圖10A)彈出樹(shù)葉選擇窗口(如圖10B),選擇所需樹(shù)葉貼圖點(diǎn)擊確認(rèn)按鍵后即可生成用戶(hù)所需的樹(shù)葉樣式。樹(shù)葉更改后的樹(shù)木模型如圖10C。
圖10 樹(shù)葉參數(shù)更改前(A)中(B)后(C)效果圖Figure 10 The pictures of before (A),middle(B) and after(C) the changes of leaf parameters
樹(shù)的影子主要通過(guò)樹(shù)影長(zhǎng)度、枝影密度、葉影密度3項(xiàng)屬性值加以控制。用戶(hù)可以通過(guò)對(duì)以上屬性參數(shù)調(diào)節(jié)來(lái)獲得所需的陰影效果,數(shù)值越大樹(shù)影長(zhǎng)度越長(zhǎng),枝干和樹(shù)葉影子越明顯;數(shù)值越小樹(shù)影長(zhǎng)度越短,枝干和樹(shù)葉影子越稀?。▓D11);當(dāng)數(shù)值為0時(shí)無(wú)陰影效果。
圖 11 樹(shù)影參數(shù)更改前(A)后(B)效果圖Figure 11 Pictures of before (A)and after(B)the changes of tree shadow parameters
本研究在分形理論的基礎(chǔ)上,利用改進(jìn)的樹(shù)木生成算法以及通過(guò)Visual Studio和OpenGL圖形技術(shù)相結(jié)合的方法,實(shí)現(xiàn)了可視化效果良好的交互式三維樹(shù)木建模系統(tǒng)。本研究提出的建模方法不是針對(duì)單一樹(shù)種進(jìn)行建模的,而是通過(guò)調(diào)整控制面板的屬性參數(shù)和變量或者自定義貼圖的方式來(lái)構(gòu)建形態(tài)樣式各異的三維樹(shù)木模型的。實(shí)驗(yàn)結(jié)果表明:本研究提出的方法是有效可行的,相比于基于單圖、多圖建模或基于激光點(diǎn)云等圖像建模方法出現(xiàn)的模型真實(shí)感低,交互性差,構(gòu)建效率不高的缺點(diǎn),本方法生成的樹(shù)體模型不僅形態(tài)結(jié)構(gòu)和外部特征具有很高的靈活性且操作方法簡(jiǎn)單易上手,在保證實(shí)時(shí)性繪制的前提下,能夠達(dá)到真實(shí)性的要求。當(dāng)然本研究的三維樹(shù)木建模方法也存在不足,對(duì)于形態(tài)結(jié)構(gòu)較為復(fù)雜的樹(shù)木無(wú)法精確建模,且對(duì)于植物器官細(xì)節(jié)的特征變量還不能進(jìn)行有效提取,真實(shí)感也還有待提高。生成算法也還需進(jìn)一步優(yōu)化,進(jìn)一步提升計(jì)算速度,從而建立一個(gè)通用性更強(qiáng)、建模效率更高、人機(jī)交互性更好的自動(dòng)化三維樹(shù)木建模系統(tǒng)。