徐旭東,王 菁
(北京工業大學 計算機學院,北京100124)
虛擬花卉建模是虛擬植物研究領域的熱點課題之一?;ɑ苡苫ò?、花葉、花莖等組成,各組織器官結構精細而不規則,其幾何和拓撲結構的復雜性使建模既困難又費時,頗具挑戰性。虛擬花卉在生態環境仿真、農林研究以及游戲、動畫等虛擬場景造型方面有著廣闊的應用前景?;ò?、花葉等片狀器官的曲面建模是花卉建模中的主要部分,常見的造型方法有多邊形網格建模、自由曲面建模、基于手繪草圖建模等。曾蘭玲[1]和劉金定[2]等分別用三角網格和四邊形面片模擬了玫瑰、荷花等的花瓣,但構造的曲面模型不夠自然;張穎[3]提出了一種利用Delaunay三角網格化算法對提取的花瓣輪廓進行網格填充的方法來模擬片狀器官,但隨著曲面細分精度增加,系統的性能也會下降。Ijiri[4]根據手繪草圖和彎曲控制函數交互式構建花瓣模型,此方法要求用戶具有繪畫基礎,通用性不高。文獻[5,6]采用Bezier曲面模擬了蘋果花和郁金香的花瓣,逼真地再現了花瓣的幾何形態,但控制點的提取是個難題。曾茜[7]采用自定義的拓撲結構建立了單枝石竹模型,但未構建完整的花卉植株模型。本文以吊蘭作為研究對象,采用Bezier曲面并結合OpenGL中的拾取技術提出了一種快速、通用的片狀器官建模方法,生成了吊蘭花瓣、葉片模型;基于曲線擬合實現了任意彎曲度的花莖、花梗的模擬,最終構建了完整的虛擬吊蘭植株,模型真實自然,驗證了方法的有效性。
吊蘭為多年生草本植物,葉細長,綠色或有黃色條紋,長10~30cm,寬1~2cm,條形至條狀披針形;花被細小呈葉狀,裂片6枚[8]。吊蘭花瓣、葉片均屬于片狀器官;Bezier曲面具有良好的局部形狀控制能力和較好的邊界適應性,能夠靈活表現彎曲型面,是構建片狀器官的首選方法。
片狀器官建模主要包括3個步驟:①通過實時測量或利用圖像處理軟件提取初始特征控制點;②根據特征控制點構建Bezier曲面;③交互式微調特征控制點以逼近真實曲面形態。
Bezier曲面雖然構造靈活,但算法實現相對復雜,綜合考慮花瓣、葉片的幾何形態特征和Bezier曲面的表現能力,應用雙三次Bezier曲面來模擬吊蘭的花瓣和葉片。Bezier曲面定義如下:給定 (m+1)× (n+1)個空間控制點Vi,j(i=0,1,…,m;j=0,1,…,n),令

式 (1)所表示的曲面為m×n次的Bezier曲面。Vi,j表示曲面上第i行第j列的初始特征控制點,依次用線段連接控制點Vi,j(i=0,1,…,m;j=0,1,…,n)中相鄰兩頂點所形成的空間網格稱為Bezier曲面的特征控制網格,它框定了Bezier曲面的大致形狀。
當取m=3,n=3時,得到雙三次Bezier曲面,構造雙三次Bezier曲面需要定義 (m+1)× (n+1)=4×4個初始控制點,即Vi,j(i=0,1,…,3;j=0,1,…,3),雙三次Bezier曲面的表示式如式 (2)所示。

式 (2)是關于μ,w的雙三次多項式,它由矩陣V中的16個特征控制點的位置所確定。這16個特征控制點中只有V00、V03、V30、V33位于Bezier曲面上。V中周圍的12個特征控制點定義了4條Bezier曲線,即邊界曲線;其余的V11、V12、V21、V22與邊界曲線無關,但影響曲面片的凹凸形狀。根據μ,w的不同取值依次計算在兩個分量的方向上沿4條Bezier曲線的若干插值點,連接這些點即構成雙三Bezier曲面[9]。
在OpenGL中,Bezier曲面的構造可借助二維求值器實現[10]。二維求值器把用戶提取的特征控制點作為輸入,根據設定的精度自動計算指定曲面上的坐標點,輸出任意精度的Bezier曲面,同時求值器還可以生成曲面上的顏色數據、法線向量和紋理坐標等。
應用二維求值器模擬吊蘭花瓣的算法見表1。其中,glMapGrid2f(n,u1,u2,m,v1,v2)定義的二維均勻網格控制曲面的精度,應用二維均勻網格可通過自動計算得到均勻間隔的μ,w值。本例中設置曲面精度為15,即在兩個分量方向上每條曲線被細分成15段,則繪制每張曲面片需要連接16×16=256個坐標點。用Bezier曲面模擬的吊蘭花瓣如圖1所示,其中,圖1(a)為花瓣網格曲面,圖1(b)為添加紋理后的花瓣模型。

表1 吊蘭花瓣繪制算法
吊蘭花瓣的特征控制點矩陣V為


圖1 吊蘭花瓣模型
采用Bezier曲面模擬花瓣、葉片,只需要提取片狀器官表面的少量三維坐標點作為模型控制點,但特征控制點的提取具有一定難度。根據幾何定義,構建雙三次Bezier曲面,需要提取16個特征控制點。以模擬吊蘭葉片為例,選擇具有代表性且輪廓清晰的吊蘭葉片圖片,利用圖像處理軟件提取圖片上的16個二維坐標點,然后采用估測的方法將二維坐標點轉換為三維坐標點,即可獲得所需的16個特征控制點。根據提取的初始特征控制點繪制的吊蘭葉片曲面及其特征控制網格,如圖2(a)所示。
OpenGL中的拾取技術提供了一種選擇和反饋機制,允許用戶識別屏幕上的物體并對物體進行移動、旋轉、縮放等交互式操作[11]。應用OpenGL中的拾取技術,可以對特征控制點的坐標進行局部微調,直到繪制出令人滿意的曲面形狀。交互式調整特征控制點的方法可以方便、快速地確定滿足要求的控制點坐標,增強了建??煽匦院颓婢珳识?。通過交互式微調控制點坐標繪制的不同彎曲度的吊蘭葉片模型見圖2(b)~ (e)。

圖2 吊蘭葉片模型
為了使花卉模型更加真實地表現現實中的花朵,除了花冠主體外,花梗、花莖、花蕊等細節部分的模擬也越來越受到研究者的重視。岳延濱等[12]將橢球體和圓柱體連接在一起模擬油菜花的雄蕊、雌蕊,真實感較差。蘇紅波等[13]選取B樣條曲線擬合中心軸線,通過曲線上一點的三維坐標、該點的切線及過該點的截面半徑求出截面輪廓點的三維坐標來模擬以上各器官,該方法可以模擬器官的任意彎曲形態,但計算比較復雜。
吊蘭花莖、花梗等呈彎曲的長柱狀,其彎曲特性和一個周期內的三角函數曲線相似,因此可將三角函數作為模型的彎曲控制函數,并通過調整相應控制參數來展現不同的彎曲效果。彎曲柱體可由多個小柱體拼接而成,其中每個小柱體相對X軸的偏移角度θ由正弦函數計算得到,由此可生成基于正弦曲線擬合的彎曲柱體。

圖3 彎曲柱體構造
如圖3所示,l為單段小柱體的高度 (長度),θ為其相對X軸的偏移角,hj和hj+1分別為小柱體底部、頂部距離地面的高度。圖中彎曲柱體由s=5段小柱體組成,對正弦函數在指定的定義域內進行同樣地均等分,可依次計算得到每個等分點處對應的hj,見式 (3)

其中,參數a為振幅,可以調整曲柱體的彎曲度,a值越大,曲柱體越彎;b表示正弦函數的定義域,例如b取值為2,則最終的彎曲柱體是對π/2內的正弦曲線的擬合,即b確定了彎曲柱體的跨度;s為彎曲柱體的細分精度,表示彎曲柱體由s段小柱體拼接而成。由式 (4)、式 (5)、式 (6)可以方便地求得每段小柱體相對X軸的偏移角度θ;以上參數均可以交互式調整,從而可以擬合不同彎曲度的曲柱體,如圖4所示


通過以上計算,將每段小柱體相對原點的平移距離(xj,hj)和相對X軸的偏移角度θ作為曲柱體的節間參數記錄下來。該參數有兩個用途:①指定每段小柱體的空間方位,完成彎曲柱體的建模;②當用曲柱體模擬花莖時,確定花朵和葉片等組織器官在花莖上的著生位置。
特別指出:小柱體既可以選用圓柱體,也可選用底面半徑同頂面半徑不相等的圓臺。選用圓臺時,曲柱體中第j段小柱體的頂面半徑應等于第j+1段小柱體的底面半徑;這些半徑的值可通過在最大半徑和最小半徑之間進行線性插值得到。表2給出了彎曲柱體的建模算法:

表2 基于曲線擬合的彎曲柱體繪制算法
吊蘭花莖 (葶)細長彎垂,長于葉,有時長達50cm,常變為匍枝,近頂端著生葉束、花簇或幼小植株;花梗、花絲稍彎,花藥呈淡黃色。通過對吊蘭的觀察并結合以往研究成果,可用細長的彎曲圓柱體模擬吊蘭花莖,花梗也可看成細小的彎曲柱體,雄蕊可看成由稍彎的細柱體和橢球體連接而成。
圖4(a)為采用彎曲柱體構造的花莖模型,其彎曲度為1.4,跨度為1.25π(π/0.8),由15段小圓柱體拼接而成,其狀恰似半個周期內的正弦函數曲線。同理花梗和花絲的模型見圖4(b)和(c),在實際應用中要對模型進行相應的縮放。雄蕊模型頂端花藥采用橢球體來模擬,如圖4(d)所示。

圖4 吊蘭附屬組織器官模型
花朵的建模主要考慮花瓣的重建及排列算法;植株的建模主要考慮各組織器官之間的拓撲結構。吊蘭花小,呈白色,常2~4朵簇生,疏離地散生于花序軸上,單層花,花瓣六枚,鑷合狀排列,雄蕊6枚;花梗關節位于中部至上部;葉自根際叢生,有時在花莖上部節上簇生長2~8cm的條形葉叢。因其葉簇似花朵,四季常綠,故為著名的觀葉花卉[8]。
將花卉各組織器官模型按照一定的拓撲結構有機地連接起來就可生成三維花朵。其中最主要的是花瓣的組裝,這涉及到花瓣的排列方式,是否單層花瓣,每層花瓣數量,花瓣大小以及向外擴展的角度等屬性。分形方法是最常用的花朵生成方法,其本質是利用植物的自相似性,以某片花瓣作為初始元,經過不同的縮放、平移、旋轉操作得到初始元的若干復制,從而組成一朵花。因此,定義單片花瓣模型的屬性:{偏移角,旋轉角,縮放比},如圖5所示。吊蘭花朵的抽象結構定義詳見表3。
吊蘭花為單層鑷合狀排列,花瓣六枚。取petalNum=6,相鄰花瓣間夾角為60度,因是單層花,設rotateAng=autorotAng=0。rdFactor和offsetAng結合生成[offset-Ang-rdFactor,offsetAng+rdFactor]范圍內的隨機偏移角,見式 (7)


圖5 花瓣的偏移角和旋轉角

表3 吊蘭花朵抽象結構模型
根據不同隨機偏移角構造的吊蘭花側視圖見圖6。吊蘭葉簇構造過程同花朵構造過程相似,不再贅述。生成的葉簇模型見圖7。根據吊蘭植株的自相似原理,吊蘭花莖頂端著生的小植株與主體葉簇外形具有統計意義上的自相似性,故將生成的葉簇模型進行適當縮放后作為花莖頂端的小植株。吊蘭花朵簇生在花莖頂端小植株4周,本例中設置花朵數目為4。一株吊蘭約有3~10個走莖,本例取走莖數目為3,完整的吊蘭植株模型見圖8(a)。
隨著花瓣建模精度的增加和場景中渲染的模型數目的增多,渲染速度明顯變慢,這是因為每次刷新都要重新計算每片花瓣和葉片模型上的坐標點,這無疑會極大的占用CPU,影響渲染速度。為解決這一問題,采用OpenGL顯示列表技術,將花瓣、葉片的求值過程放在顯示列表中存儲起來。顯示列表中的OpenGL語句可以一次編譯,多次執行,即只在首次調用顯示列表時計算一次列表中相應語句,當再次調用顯示列表時可不用計算直接執行。在吊蘭建模過程中,葉片、花瓣模型需要多次繪制,可分別建立花瓣和葉片的顯示列表,將計算得到的模型數據暫存在緩存中,作為初始模型;在構造吊蘭花朵模型和植株模型時,只需對初始模型進行縮放、旋轉、平移等操作就可得到初始模型的若干 “變異”復制。因此,應用顯示列表可以顯著降低CPU的使用,從而提高程序性能。

圖6 不同偏移角下的吊蘭花側視

圖7 吊蘭葉簇
僅僅構造了三維幾何模型尚不能表現吊蘭的真實形態,還需要進行真實感渲染。紋理映射技術是真實感渲染的一個重要部分,運用它可以方便地制作出極具真實感的圖形而不必花費過多的時間來考慮物體表面的細節。紋理映射的過程包括:定義紋理對象;控制濾波;設置映射方式;繪制場景并加載紋理,設置頂點的紋理坐標和幾何坐標。本例中利用Photoshop從微距拍攝的吊蘭圖片中提取所需的紋理,并應用OpenGL中的MipMapping技術將.bmp格式的紋理圖片映射到模型表面。最后利用OpenGL光照模型為渲染場景添加光照效果,使構造的虛擬花卉模型更加逼真。
實驗以吊蘭為研究對象,采用C++語言并結合Open-GL圖形庫在Visual Studio 2008平臺下實現了吊蘭植株的真實感建模。其中葉片、花瓣的紋理貼圖從微距拍攝的實物照片中提取并經PS軟件處理后得到,幾何建模數據通過對實驗室種植的吊蘭進行實際測量并結合理論數據設定。應用文中介紹的曲柱體建模方法,通過擬合1.25π內的正弦函數曲線 (截圖未展現全部),并在頂端著生4朵花、1叢葉簇,構建的吊蘭走莖如圖9(a)所示。經過與圖9(b)拍攝的走莖照片對照表明,正弦曲線能夠較真實的展現走莖的彎曲形態。根據文中相應建模方法,結合所獲取數據,進行真實感渲染后的完整虛擬吊蘭植株如圖8(a)所示,圖8(b)為拍攝的吊蘭照片。由可視化建模結果同實物照片的對比圖可看出,所構造的三維模型逼真地再現了吊蘭的形態特征,真實感較好。

圖8 吊蘭植株渲染效果對比

圖9 吊蘭走莖渲染效果對比
本文以虛擬吊蘭建模為例,介紹了虛擬花卉建模過程和可視化方法。用Bezier曲面實現了吊蘭花瓣和葉片的模擬,針對難以提取特征控制點的問題,提出了基于OpenGL拾取技術交互式微調控制點的方法,進而快速鎖定特征控制點,構建滿足需求的曲面形狀。設計了基于正弦函數曲線擬合的通用的彎曲柱體生成算法,通過改變參數生成不同彎曲度的花莖和花梗。在花朵模型構建中,應用隨機函數控制生成每片花瓣的隨機偏移角,從而彌補了分形花顯得過于規則的不足;OpenGL中的拾取技術、顯示列表技術的應用增強了系統交互性,提高了建模速度。本文沒有考慮組織器官的碰撞檢測問題,這將是下一步努力的方向。
[1]ZENG Lanling.Research on trees and flowers modeling[D].Zhejiang:Zhejiang University,2009:41-55 (in Chinese).[曾蘭玲.樹木花卉形態建模研究[D].浙江:浙江大學,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].安徽農業科學,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).[張穎.虛擬植物可視化關鍵技術研究[D].重慶:重慶大學,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-系統及Bezier曲面的植物花朵模擬模型[J].計算機工程與應用,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).[張銘.三維花開過程動態模擬技術研究與實現[D].廈門:廈門大學,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).[淮永建,曾茜.花卉植物形態與生長可視化仿真研究[J].計算機工程與應用,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).[羅笑南,王若梅.計算機圖形學[M].3版.廣州:中山大學出版社,2008:203-209.]
[10]YANG Bolin,CHEN Genlang,XU Jing.Essential OpenGl Programming[M].Beijing:China Machine Press,2010 (in Chinese).[楊柏林,陳根浪,徐靜.OpenGL編程精粹[M].北京:機械工業出版社,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版.李軍,徐波,譯.北京:機械工業出版社,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).[岳延濱,朱艷,曹宏鑫.基于幾何參數模型和OpenGL的油菜花朵可視化研究[J].江蘇農業學報,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].中國農學通報,2009,25 (2):272-276.]