徐旭東,王 菁
(北京工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,北京100124)
虛擬花卉建模是虛擬植物研究領(lǐng)域的熱點(diǎn)課題之一?;ɑ苡苫ò?、花葉、花莖等組成,各組織器官結(jié)構(gòu)精細(xì)而不規(guī)則,其幾何和拓?fù)浣Y(jié)構(gòu)的復(fù)雜性使建模既困難又費(fèi)時,頗具挑戰(zhàn)性。虛擬花卉在生態(tài)環(huán)境仿真、農(nóng)林研究以及游戲、動畫等虛擬場景造型方面有著廣闊的應(yīng)用前景?;ò?、花葉等片狀器官的曲面建模是花卉建模中的主要部分,常見的造型方法有多邊形網(wǎng)格建模、自由曲面建模、基于手繪草圖建模等。曾蘭玲[1]和劉金定[2]等分別用三角網(wǎng)格和四邊形面片模擬了玫瑰、荷花等的花瓣,但構(gòu)造的曲面模型不夠自然;張穎[3]提出了一種利用Delaunay三角網(wǎng)格化算法對提取的花瓣輪廓進(jìn)行網(wǎng)格填充的方法來模擬片狀器官,但隨著曲面細(xì)分精度增加,系統(tǒng)的性能也會下降。Ijiri[4]根據(jù)手繪草圖和彎曲控制函數(shù)交互式構(gòu)建花瓣模型,此方法要求用戶具有繪畫基礎(chǔ),通用性不高。文獻(xiàn)[5,6]采用Bezier曲面模擬了蘋果花和郁金香的花瓣,逼真地再現(xiàn)了花瓣的幾何形態(tài),但控制點(diǎn)的提取是個難題。曾茜[7]采用自定義的拓?fù)浣Y(jié)構(gòu)建立了單枝石竹模型,但未構(gòu)建完整的花卉植株模型。本文以吊蘭作為研究對象,采用Bezier曲面并結(jié)合OpenGL中的拾取技術(shù)提出了一種快速、通用的片狀器官建模方法,生成了吊蘭花瓣、葉片模型;基于曲線擬合實(shí)現(xiàn)了任意彎曲度的花莖、花梗的模擬,最終構(gòu)建了完整的虛擬吊蘭植株,模型真實(shí)自然,驗(yàn)證了方法的有效性。
吊蘭為多年生草本植物,葉細(xì)長,綠色或有黃色條紋,長10~30cm,寬1~2cm,條形至條狀披針形;花被細(xì)小呈葉狀,裂片6枚[8]。吊蘭花瓣、葉片均屬于片狀器官;Bezier曲面具有良好的局部形狀控制能力和較好的邊界適應(yīng)性,能夠靈活表現(xiàn)彎曲型面,是構(gòu)建片狀器官的首選方法。
片狀器官建模主要包括3個步驟:①通過實(shí)時測量或利用圖像處理軟件提取初始特征控制點(diǎn);②根據(jù)特征控制點(diǎn)構(gòu)建Bezier曲面;③交互式微調(diào)特征控制點(diǎn)以逼近真實(shí)曲面形態(tài)。
Bezier曲面雖然構(gòu)造靈活,但算法實(shí)現(xiàn)相對復(fù)雜,綜合考慮花瓣、葉片的幾何形態(tài)特征和Bezier曲面的表現(xiàn)能力,應(yīng)用雙三次Bezier曲面來模擬吊蘭的花瓣和葉片。Bezier曲面定義如下:給定 (m+1)× (n+1)個空間控制點(diǎn)Vi,j(i=0,1,…,m;j=0,1,…,n),令
式 (1)所表示的曲面為m×n次的Bezier曲面。Vi,j表示曲面上第i行第j列的初始特征控制點(diǎn),依次用線段連接控制點(diǎn)Vi,j(i=0,1,…,m;j=0,1,…,n)中相鄰兩頂點(diǎn)所形成的空間網(wǎng)格稱為Bezier曲面的特征控制網(wǎng)格,它框定了Bezier曲面的大致形狀。
當(dāng)取m=3,n=3時,得到雙三次Bezier曲面,構(gòu)造雙三次Bezier曲面需要定義 (m+1)× (n+1)=4×4個初始控制點(diǎn),即Vi,j(i=0,1,…,3;j=0,1,…,3),雙三次Bezier曲面的表示式如式 (2)所示。
式 (2)是關(guān)于μ,w的雙三次多項(xiàng)式,它由矩陣V中的16個特征控制點(diǎn)的位置所確定。這16個特征控制點(diǎn)中只有V00、V03、V30、V33位于Bezier曲面上。V中周圍的12個特征控制點(diǎn)定義了4條Bezier曲線,即邊界曲線;其余的V11、V12、V21、V22與邊界曲線無關(guān),但影響曲面片的凹凸形狀。根據(jù)μ,w的不同取值依次計(jì)算在兩個分量的方向上沿4條Bezier曲線的若干插值點(diǎn),連接這些點(diǎn)即構(gòu)成雙三Bezier曲面[9]。
在OpenGL中,Bezier曲面的構(gòu)造可借助二維求值器實(shí)現(xiàn)[10]。二維求值器把用戶提取的特征控制點(diǎn)作為輸入,根據(jù)設(shè)定的精度自動計(jì)算指定曲面上的坐標(biāo)點(diǎn),輸出任意精度的Bezier曲面,同時求值器還可以生成曲面上的顏色數(shù)據(jù)、法線向量和紋理坐標(biāo)等。
應(yīng)用二維求值器模擬吊蘭花瓣的算法見表1。其中,glMapGrid2f(n,u1,u2,m,v1,v2)定義的二維均勻網(wǎng)格控制曲面的精度,應(yīng)用二維均勻網(wǎng)格可通過自動計(jì)算得到均勻間隔的μ,w值。本例中設(shè)置曲面精度為15,即在兩個分量方向上每條曲線被細(xì)分成15段,則繪制每張曲面片需要連接16×16=256個坐標(biāo)點(diǎn)。用Bezier曲面模擬的吊蘭花瓣如圖1所示,其中,圖1(a)為花瓣網(wǎng)格曲面,圖1(b)為添加紋理后的花瓣模型。
表1 吊蘭花瓣繪制算法
吊蘭花瓣的特征控制點(diǎn)矩陣V為
圖1 吊蘭花瓣模型
采用Bezier曲面模擬花瓣、葉片,只需要提取片狀器官表面的少量三維坐標(biāo)點(diǎn)作為模型控制點(diǎn),但特征控制點(diǎn)的提取具有一定難度。根據(jù)幾何定義,構(gòu)建雙三次Bezier曲面,需要提取16個特征控制點(diǎn)。以模擬吊蘭葉片為例,選擇具有代表性且輪廓清晰的吊蘭葉片圖片,利用圖像處理軟件提取圖片上的16個二維坐標(biāo)點(diǎn),然后采用估測的方法將二維坐標(biāo)點(diǎn)轉(zhuǎn)換為三維坐標(biāo)點(diǎn),即可獲得所需的16個特征控制點(diǎn)。根據(jù)提取的初始特征控制點(diǎn)繪制的吊蘭葉片曲面及其特征控制網(wǎng)格,如圖2(a)所示。
OpenGL中的拾取技術(shù)提供了一種選擇和反饋機(jī)制,允許用戶識別屏幕上的物體并對物體進(jìn)行移動、旋轉(zhuǎn)、縮放等交互式操作[11]。應(yīng)用OpenGL中的拾取技術(shù),可以對特征控制點(diǎn)的坐標(biāo)進(jìn)行局部微調(diào),直到繪制出令人滿意的曲面形狀。交互式調(diào)整特征控制點(diǎn)的方法可以方便、快速地確定滿足要求的控制點(diǎn)坐標(biāo),增強(qiáng)了建??煽匦院颓婢珳?zhǔn)度。通過交互式微調(diào)控制點(diǎn)坐標(biāo)繪制的不同彎曲度的吊蘭葉片模型見圖2(b)~ (e)。
圖2 吊蘭葉片模型
為了使花卉模型更加真實(shí)地表現(xiàn)現(xiàn)實(shí)中的花朵,除了花冠主體外,花梗、花莖、花蕊等細(xì)節(jié)部分的模擬也越來越受到研究者的重視。岳延濱等[12]將橢球體和圓柱體連接在一起模擬油菜花的雄蕊、雌蕊,真實(shí)感較差。蘇紅波等[13]選取B樣條曲線擬合中心軸線,通過曲線上一點(diǎn)的三維坐標(biāo)、該點(diǎn)的切線及過該點(diǎn)的截面半徑求出截面輪廓點(diǎn)的三維坐標(biāo)來模擬以上各器官,該方法可以模擬器官的任意彎曲形態(tài),但計(jì)算比較復(fù)雜。
吊蘭花莖、花梗等呈彎曲的長柱狀,其彎曲特性和一個周期內(nèi)的三角函數(shù)曲線相似,因此可將三角函數(shù)作為模型的彎曲控制函數(shù),并通過調(diào)整相應(yīng)控制參數(shù)來展現(xiàn)不同的彎曲效果。彎曲柱體可由多個小柱體拼接而成,其中每個小柱體相對X軸的偏移角度θ由正弦函數(shù)計(jì)算得到,由此可生成基于正弦曲線擬合的彎曲柱體。
圖3 彎曲柱體構(gòu)造
如圖3所示,l為單段小柱體的高度 (長度),θ為其相對X軸的偏移角,hj和hj+1分別為小柱體底部、頂部距離地面的高度。圖中彎曲柱體由s=5段小柱體組成,對正弦函數(shù)在指定的定義域內(nèi)進(jìn)行同樣地均等分,可依次計(jì)算得到每個等分點(diǎn)處對應(yīng)的hj,見式 (3)
其中,參數(shù)a為振幅,可以調(diào)整曲柱體的彎曲度,a值越大,曲柱體越彎;b表示正弦函數(shù)的定義域,例如b取值為2,則最終的彎曲柱體是對π/2內(nèi)的正弦曲線的擬合,即b確定了彎曲柱體的跨度;s為彎曲柱體的細(xì)分精度,表示彎曲柱體由s段小柱體拼接而成。由式 (4)、式 (5)、式 (6)可以方便地求得每段小柱體相對X軸的偏移角度θ;以上參數(shù)均可以交互式調(diào)整,從而可以擬合不同彎曲度的曲柱體,如圖4所示
通過以上計(jì)算,將每段小柱體相對原點(diǎn)的平移距離(xj,hj)和相對X軸的偏移角度θ作為曲柱體的節(jié)間參數(shù)記錄下來。該參數(shù)有兩個用途:①指定每段小柱體的空間方位,完成彎曲柱體的建模;②當(dāng)用曲柱體模擬花莖時,確定花朵和葉片等組織器官在花莖上的著生位置。
特別指出:小柱體既可以選用圓柱體,也可選用底面半徑同頂面半徑不相等的圓臺。選用圓臺時,曲柱體中第j段小柱體的頂面半徑應(yīng)等于第j+1段小柱體的底面半徑;這些半徑的值可通過在最大半徑和最小半徑之間進(jìn)行線性插值得到。表2給出了彎曲柱體的建模算法:
表2 基于曲線擬合的彎曲柱體繪制算法
吊蘭花莖 (葶)細(xì)長彎垂,長于葉,有時長達(dá)50cm,常變?yōu)橘橹?,近頂端著生葉束、花簇或幼小植株;花梗、花絲稍彎,花藥呈淡黃色。通過對吊蘭的觀察并結(jié)合以往研究成果,可用細(xì)長的彎曲圓柱體模擬吊蘭花莖,花梗也可看成細(xì)小的彎曲柱體,雄蕊可看成由稍彎的細(xì)柱體和橢球體連接而成。
圖4(a)為采用彎曲柱體構(gòu)造的花莖模型,其彎曲度為1.4,跨度為1.25π(π/0.8),由15段小圓柱體拼接而成,其狀恰似半個周期內(nèi)的正弦函數(shù)曲線。同理花梗和花絲的模型見圖4(b)和(c),在實(shí)際應(yīng)用中要對模型進(jìn)行相應(yīng)的縮放。雄蕊模型頂端花藥采用橢球體來模擬,如圖4(d)所示。
圖4 吊蘭附屬組織器官模型
花朵的建模主要考慮花瓣的重建及排列算法;植株的建模主要考慮各組織器官之間的拓?fù)浣Y(jié)構(gòu)。吊蘭花小,呈白色,常2~4朵簇生,疏離地散生于花序軸上,單層花,花瓣六枚,鑷合狀排列,雄蕊6枚;花梗關(guān)節(jié)位于中部至上部;葉自根際叢生,有時在花莖上部節(jié)上簇生長2~8cm的條形葉叢。因其葉簇似花朵,四季常綠,故為著名的觀葉花卉[8]。
將花卉各組織器官模型按照一定的拓?fù)浣Y(jié)構(gòu)有機(jī)地連接起來就可生成三維花朵。其中最主要的是花瓣的組裝,這涉及到花瓣的排列方式,是否單層花瓣,每層花瓣數(shù)量,花瓣大小以及向外擴(kuò)展的角度等屬性。分形方法是最常用的花朵生成方法,其本質(zhì)是利用植物的自相似性,以某片花瓣作為初始元,經(jīng)過不同的縮放、平移、旋轉(zhuǎn)操作得到初始元的若干復(fù)制,從而組成一朵花。因此,定義單片花瓣模型的屬性:{偏移角,旋轉(zhuǎn)角,縮放比},如圖5所示。吊蘭花朵的抽象結(jié)構(gòu)定義詳見表3。
吊蘭花為單層鑷合狀排列,花瓣六枚。取petalNum=6,相鄰花瓣間夾角為60度,因是單層花,設(shè)rotateAng=autorotAng=0。rdFactor和offsetAng結(jié)合生成[offset-Ang-rdFactor,offsetAng+rdFactor]范圍內(nèi)的隨機(jī)偏移角,見式 (7)
圖5 花瓣的偏移角和旋轉(zhuǎn)角
表3 吊蘭花朵抽象結(jié)構(gòu)模型
根據(jù)不同隨機(jī)偏移角構(gòu)造的吊蘭花側(cè)視圖見圖6。吊蘭葉簇構(gòu)造過程同花朵構(gòu)造過程相似,不再贅述。生成的葉簇模型見圖7。根據(jù)吊蘭植株的自相似原理,吊蘭花莖頂端著生的小植株與主體葉簇外形具有統(tǒng)計(jì)意義上的自相似性,故將生成的葉簇模型進(jìn)行適當(dāng)縮放后作為花莖頂端的小植株。吊蘭花朵簇生在花莖頂端小植株4周,本例中設(shè)置花朵數(shù)目為4。一株吊蘭約有3~10個走莖,本例取走莖數(shù)目為3,完整的吊蘭植株模型見圖8(a)。
隨著花瓣建模精度的增加和場景中渲染的模型數(shù)目的增多,渲染速度明顯變慢,這是因?yàn)槊看嗡⑿露家匦掠?jì)算每片花瓣和葉片模型上的坐標(biāo)點(diǎn),這無疑會極大的占用CPU,影響渲染速度。為解決這一問題,采用OpenGL顯示列表技術(shù),將花瓣、葉片的求值過程放在顯示列表中存儲起來。顯示列表中的OpenGL語句可以一次編譯,多次執(zhí)行,即只在首次調(diào)用顯示列表時計(jì)算一次列表中相應(yīng)語句,當(dāng)再次調(diào)用顯示列表時可不用計(jì)算直接執(zhí)行。在吊蘭建模過程中,葉片、花瓣模型需要多次繪制,可分別建立花瓣和葉片的顯示列表,將計(jì)算得到的模型數(shù)據(jù)暫存在緩存中,作為初始模型;在構(gòu)造吊蘭花朵模型和植株模型時,只需對初始模型進(jìn)行縮放、旋轉(zhuǎn)、平移等操作就可得到初始模型的若干 “變異”復(fù)制。因此,應(yīng)用顯示列表可以顯著降低CPU的使用,從而提高程序性能。
圖6 不同偏移角下的吊蘭花側(cè)視
圖7 吊蘭葉簇
僅僅構(gòu)造了三維幾何模型尚不能表現(xiàn)吊蘭的真實(shí)形態(tài),還需要進(jìn)行真實(shí)感渲染。紋理映射技術(shù)是真實(shí)感渲染的一個重要部分,運(yùn)用它可以方便地制作出極具真實(shí)感的圖形而不必花費(fèi)過多的時間來考慮物體表面的細(xì)節(jié)。紋理映射的過程包括:定義紋理對象;控制濾波;設(shè)置映射方式;繪制場景并加載紋理,設(shè)置頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)。本例中利用Photoshop從微距拍攝的吊蘭圖片中提取所需的紋理,并應(yīng)用OpenGL中的MipMapping技術(shù)將.bmp格式的紋理圖片映射到模型表面。最后利用OpenGL光照模型為渲染場景添加光照效果,使構(gòu)造的虛擬花卉模型更加逼真。
實(shí)驗(yàn)以吊蘭為研究對象,采用C++語言并結(jié)合Open-GL圖形庫在Visual Studio 2008平臺下實(shí)現(xiàn)了吊蘭植株的真實(shí)感建模。其中葉片、花瓣的紋理貼圖從微距拍攝的實(shí)物照片中提取并經(jīng)PS軟件處理后得到,幾何建模數(shù)據(jù)通過對實(shí)驗(yàn)室種植的吊蘭進(jìn)行實(shí)際測量并結(jié)合理論數(shù)據(jù)設(shè)定。應(yīng)用文中介紹的曲柱體建模方法,通過擬合1.25π內(nèi)的正弦函數(shù)曲線 (截圖未展現(xiàn)全部),并在頂端著生4朵花、1叢葉簇,構(gòu)建的吊蘭走莖如圖9(a)所示。經(jīng)過與圖9(b)拍攝的走莖照片對照表明,正弦曲線能夠較真實(shí)的展現(xiàn)走莖的彎曲形態(tài)。根據(jù)文中相應(yīng)建模方法,結(jié)合所獲取數(shù)據(jù),進(jìn)行真實(shí)感渲染后的完整虛擬吊蘭植株如圖8(a)所示,圖8(b)為拍攝的吊蘭照片。由可視化建模結(jié)果同實(shí)物照片的對比圖可看出,所構(gòu)造的三維模型逼真地再現(xiàn)了吊蘭的形態(tài)特征,真實(shí)感較好。
圖8 吊蘭植株渲染效果對比
圖9 吊蘭走莖渲染效果對比
本文以虛擬吊蘭建模為例,介紹了虛擬花卉建模過程和可視化方法。用Bezier曲面實(shí)現(xiàn)了吊蘭花瓣和葉片的模擬,針對難以提取特征控制點(diǎn)的問題,提出了基于OpenGL拾取技術(shù)交互式微調(diào)控制點(diǎn)的方法,進(jìn)而快速鎖定特征控制點(diǎn),構(gòu)建滿足需求的曲面形狀。設(shè)計(jì)了基于正弦函數(shù)曲線擬合的通用的彎曲柱體生成算法,通過改變參數(shù)生成不同彎曲度的花莖和花梗。在花朵模型構(gòu)建中,應(yīng)用隨機(jī)函數(shù)控制生成每片花瓣的隨機(jī)偏移角,從而彌補(bǔ)了分形花顯得過于規(guī)則的不足;OpenGL中的拾取技術(shù)、顯示列表技術(shù)的應(yīng)用增強(qiáng)了系統(tǒng)交互性,提高了建模速度。本文沒有考慮組織器官的碰撞檢測問題,這將是下一步努力的方向。
[1]ZENG Lanling.Research on trees and flowers modeling[D].Zhejiang:Zhejiang University,2009:41-55 (in Chinese).[曾蘭玲.樹木花卉形態(tài)建模研究[D].浙江:浙江大學(xué),2009:41-55.]
[2]LIU Jinding,WU Yanlian,LIANG Jingdong.Simulation of the opening process of water lily based on OpenGL[J].Journal of Agricultural Sciences,2008,36 (25):11054-11056 (in Chinese).[劉金定,伍艷蓮,梁敬東.基于OpenGL的荷花開放過程模擬[J].安徽農(nóng)業(yè)科學(xué),2008,36 (25):11054-11056.]
[3]ZHANG Ying.Study on key technology of virtual plant visualization[D].Chongqing:Chongqing University,2009:23-45 (in Chinese).[張穎.虛擬植物可視化關(guān)鍵技術(shù)研究[D].重慶:重慶大學(xué),2009:23-45.]
[4]Ijiri T,Owada S,Okabe M,et al.Floral diagrams and inflorescences:Interactive flower modeling using botanical structural constraints[C]//Proceedings of SIGGRAPH.New York:ACM Press,2005.
[5]QIN Peiyu,CHEN Chuanbo,LV Zhehua.Simulation model of flower using the interaction of L-system with bezier surfaces[J].Computer Engineering & Applications,2006,42 (16):6-8(in Chinese).[秦培煜,陳傳波,呂澤華.利用L-系統(tǒng)及Bezier曲面的植物花朵模擬模型[J].計(jì)算機(jī)工程與應(yīng)用,2006,42 (16):6-8.]
[6]ZHANG Ming.Research and implementation of dynamic simulation technology in 3-dimensional blooming process[D].Xiamen:Xiamen University,2009:5-64 (in Chinese).[張銘.三維花開過程動態(tài)模擬技術(shù)研究與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2009:5-64.]
[7]HUAI Yongjian,ZENG Qian.Visual simulation of morphology and growth of flower plants[J].Computer Engineering & Applications,2012,48 (8):185-188 (in Chinese).[淮永建,曾茜.花卉植物形態(tài)與生長可視化仿真研究[J].計(jì)算機(jī)工程與應(yīng)用,2012,48 (8):185-188.]
[8]Baidu Wikipedia.Chlorophytum comosum[EB/OL].[2013-03-20].http://baike.baidu.com/view/16189.htm,2013/(in Chinese).[百 度 百 科.吊 蘭[EB/OL].[2013-03-20].http://baike.baidu.com/view/16189.htm,2013/]
[9]LUO Xiaonan,WANG Ruomei.Computer graphics[M].3rd ed.Guangzhou:Zhongshan University Press,2008 (in Chinese).[羅笑南,王若梅.計(jì)算機(jī)圖形學(xué)[M].3版.廣州:中山大學(xué)出版社,2008:203-209.]
[10]YANG Bolin,CHEN Genlang,XU Jing.Essential OpenGl Programming[M].Beijing:China Machine Press,2010 (in Chinese).[楊柏林,陳根浪,徐靜.OpenGL編程精粹[M].北京:機(jī)械工業(yè)出版社,2010.]
[11]Dave Shreiner.OpenGL Programming Guide[M].7th ed.LI Jun,XU Bo,transl.7th ed.Pearson Education,2009 (in Chinese).[Dave shreiner.OpenGL編程指南[M].7版.李軍,徐波,譯.北京:機(jī)械工業(yè)出版社,2009:383-400.]
[12]YUE Yanbin,ZHU Yan,CAO Hongxin.Models and Open-GL-based visual technology for rapeseed (Brassica napus L.)flower[J].Jiangsu Journal of Agricultural Sciences,2011,27 (2):264-270 (in Chinese).[岳延濱,朱艷,曹宏鑫.基于幾何參數(shù)模型和OpenGL的油菜花朵可視化研究[J].江蘇農(nóng)業(yè)學(xué)報(bào),2011,27 (2):264-270.]
[13]SU Hongbo,GUO Xinyu,LU Shenglian,et al.Geometry modeling and visualization of the apple inflorescence[J].Chinese Agricultural Science Bulletin,2009,25 (2):272-276 (in Chinese).[蘇紅波,郭新宇,陸聲鏈,等.蘋果花序幾何造型及可視化研究[J].中國農(nóng)學(xué)通報(bào),2009,25 (2):272-276.]