宋巨龍,孫淑娥,林椹尠
摘 要:針對(duì)目前分形植物模擬多以平面形式給出的問(wèn)題,采用粒子迭代的方法,利用OpenGL的優(yōu)良性能,給出一種三維分形植物模擬的構(gòu)造原理及實(shí)際算法,并根據(jù)該算法給出幾個(gè)植物的分形模擬結(jié)果。該結(jié)果表明,根據(jù)所給算法可以得到相當(dāng)逼真的植物全貌和葉。這種三維真實(shí)植物的模擬在目前已有的文獻(xiàn)中尚不多見(jiàn)。所得結(jié)果對(duì)模擬三維場(chǎng)景有一定的實(shí)用價(jià)值。
關(guān)鍵詞:分形;圖形學(xué);植物模擬;算法
中圖分類(lèi)號(hào):TP391;TN911.73 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004-373X(2009)12-059-02
Fractal Simulation of Plant Based on OpenGL
SONG Julong1,SUN Shu′e1,LIN Zhenxian2
(1.School of Science,Xi′an Shiyou University,Xi′an,710065,China;2.College of Science,Xi′an Institute of Post Telecommunication,Xi′an,710061,China)
Abstract:Aimming at the problem that almost all of present fractal simulation of plant is planar.Adopting the method of article iterative and excellent capability of OpenGL,the principle of structuring a fractal plant with its algorithm is given.And according to the algorithm,several results of plant simulation are given.The illustrations show that quite true whole tree and leaf can be obtained according to the algorithm.Such three dimensional true plant simulation is seldom seen in available literature.The results have a certain practical value in simulation of three dimensional scene.
Keywords:fractal;graphics;plant simulation;algorithm
0 引 言
近些年來(lái),分形作為一門(mén)藝術(shù)已逐漸成了人們研究的一個(gè)新熱點(diǎn)。事實(shí)上,早在19世紀(jì)末、20世紀(jì)初,人們已經(jīng)注意到所謂“病態(tài)”函數(shù)的圖形。諸如馮?科赫(Von Koch)曲線、皮亞諾(Peano)曲線以及Sierpinskin墊片等。盡管當(dāng)時(shí)人們關(guān)心的只是這些函數(shù)的數(shù)學(xué)性質(zhì),但無(wú)疑它們特殊而優(yōu)美的圖形也給人們留下了深刻的印象。至20世紀(jì)70年代,法裔美國(guó)數(shù)學(xué)家曼德?tīng)柌剂_特(B.B.Mandelbrot)于1975年正式提出分形的概念,分形才真正成為人們研究的新熱點(diǎn)。
經(jīng)歷了近百年的漫長(zhǎng)歲月,分形才最終形成一門(mén)科學(xué)。在眾多關(guān)于分形應(yīng)用的研究中,分形在圖形學(xué)中的應(yīng)用是重要的一支。除了Mandelbrot本人在這方面做的工作以外,Clifford Pickover,M.F.Barnsley等人對(duì)這一分支的發(fā)展也做出了杰出的貢獻(xiàn)。在我國(guó)也有不少學(xué)者在近年來(lái)對(duì)分形的圖像模擬應(yīng)用進(jìn)行了諸多研究[1-4],在這些學(xué)者的研究中,大多都局限在對(duì)分形植物的構(gòu)造方法上,所得到的圖形也都是二維的。盡管他們也提出了各種不同的分形圖案生成方法[5-8],并得到了許多漂亮的圖案[8,9],但逼真的程度還是不足,也有人嘗試做三維空間的模擬[9],但所得結(jié)果并不理想。當(dāng)然分形也有許多其他方面的應(yīng)用[10],這里就分形的植物模擬進(jìn)行探討。
在分形圖形的研究方面,分形樹(shù)的構(gòu)造是人們關(guān)注的一個(gè)熱點(diǎn)。關(guān)于這一方面的研究,人們主要關(guān)心的是2個(gè)方面的問(wèn)題:如何構(gòu)造出更加逼真的樹(shù);如何使樹(shù)的生成速度更加快捷。這兩點(diǎn)目前解決得還不是很理想,這里充分利用當(dāng)今計(jì)算機(jī)高度發(fā)達(dá)的優(yōu)勢(shì),特別是OpenGL這一良好的建模工具,建立了幾個(gè)比以往更加逼真的植物模型,給出了二維和三維的例子。其主要特點(diǎn)在于:具有幾乎可以亂真的視覺(jué)效果,給人以強(qiáng)烈的真實(shí)感;是真正的三維圖形而不是用二維圖像來(lái)造成視覺(jué)上的三維效果。這里所得結(jié)果對(duì)真實(shí)場(chǎng)景的圖像模擬具有一定的實(shí)用價(jià)值;對(duì)裝幀、裝飾藝術(shù)也有一定的使用價(jià)值。另外,對(duì)計(jì)算機(jī)藝術(shù)工作者及印刷、紡織等領(lǐng)域的圖案設(shè)計(jì)者都具有一定的參考價(jià)值。
1 建模原理
樹(shù)或其他類(lèi)似于樹(shù)的植物都具有分形的最主要特性——自相似性。這一點(diǎn)正是分形獨(dú)有的特點(diǎn)。所以利用分形來(lái)建立植物模型,具有得天獨(dú)厚的自然優(yōu)勢(shì)。
首先,給定一個(gè)作為樹(shù)干的線段(在二維情形中)或圓柱(在三維情形中),以確定其長(zhǎng)度和位置;然后,將其復(fù)制,再沿其生長(zhǎng)方向平移到某一點(diǎn),即樹(shù)的分叉點(diǎn),將其按一定比例收縮后,繞該點(diǎn)向右旋轉(zhuǎn)一定的角度。同樣,將樹(shù)干再次復(fù)制后沿生長(zhǎng)方向向上平移到另外一個(gè)分叉點(diǎn),將其按一定比例收縮后再繞該點(diǎn)向左旋轉(zhuǎn)一定的角度;如此反復(fù),根據(jù)需要決定樹(shù)的總的大枝。平移的次數(shù)取決于樹(shù)究竟需要幾個(gè)分枝。平移后的落點(diǎn)就是樹(shù)的分叉位置。對(duì)于三維情形,在旋轉(zhuǎn)的時(shí)候不僅要向左右旋轉(zhuǎn),而且需要向前后旋轉(zhuǎn)一定的角度,這樣才能真正產(chǎn)生三維的圖形。當(dāng)完成平移之后,再將每個(gè)收縮并旋轉(zhuǎn)之后的線段或圓柱作為新的樹(shù)干,再重復(fù)前面的過(guò)程。如此循環(huán)下去,重復(fù)給定的次數(shù)之后,一棵樹(shù)就構(gòu)成了。對(duì)于樹(shù)的形狀也可以加以控制。比如,可以通過(guò)調(diào)整伸縮比例決定樹(shù)的高度;調(diào)整平移的位置決定樹(shù)冠的高度;調(diào)整旋轉(zhuǎn)的角度決定每個(gè)分枝向外伸出的角度等。如果為了使所得圖形更加逼真,還可以將上述參數(shù)取為某一范圍之內(nèi)的隨機(jī)數(shù)。
用上述方法得到的樹(shù)干和所有的樹(shù)枝都是直的,如圖1所示,因此不夠逼真。為此,可在每次進(jìn)行分枝的時(shí)候,在保持節(jié)點(diǎn)不動(dòng)的情況下,用B樣條曲線來(lái)替代直線,這樣就可以得到所給出的例圖的非常逼真的效果。圖2和圖3 就是采用這種方法構(gòu)造的,具有非常逼真效果的例圖。對(duì)于三維的情形,可以用拉伸的方法,將一個(gè)平面上的小小的圓,沿B樣條曲線進(jìn)行拉伸,得到三維效果且具有一定直徑的不規(guī)則柱狀樹(shù)干或枝條,也可以用三維點(diǎn)來(lái)模擬三維空間中有一定直徑的樹(shù)干和枝條。圖4和圖5就是采用這種方法形成的。
圖1 二維樹(shù)的結(jié)構(gòu)
圖2 由例1的方法得到的樹(shù)
2 算 法
下面是一般二維樹(shù)的生成算法:
步驟1:給定一個(gè)主干,再給定一個(gè)樹(shù)的級(jí)N,令n:=1;
步驟2:在主干上分別取點(diǎn)A,B,C及頂點(diǎn)D,并將A,B,C各點(diǎn)的水平坐標(biāo)做一個(gè)微小的隨機(jī)偏移;
步驟3:將主干分別平移到A,B,C,D各點(diǎn),然后分別收縮為原來(lái)主干的r(小于1)倍,并向左或向右旋轉(zhuǎn)α,β,γ,φ,ψ角度,如圖1所示;
步驟4:做過(guò)主干端點(diǎn)及A,B,C各點(diǎn)的B樣條曲線。令n:=n+1;
步驟5:若n
這里可以調(diào)整各旋轉(zhuǎn)角度α,β,γ,φ,ψ,以決定各枝的分離程度;調(diào)整伸縮因子r,以決定各枝的長(zhǎng)度;調(diào)整A,B,C的位置及其水平坐標(biāo)偏移量,以決定樹(shù)冠的高低以及樹(shù)枝的彎曲程度。
3 數(shù)值模擬
例1:當(dāng)在上述算法中取A,B,C位于主干的1.95/3,2.5/3,2.8/3處,收縮因子為r=5/7及N=5時(shí),得到圖2所示的樹(shù)。每一級(jí)樹(shù)枝都是1條B樣條曲線,并根據(jù)不同的級(jí)確定不同的寬度,從而得到看起來(lái)的樹(shù)干和樹(shù)枝。
例2:圖3也是依據(jù)上面的算法,并將其中的幾個(gè)參數(shù)取為隨機(jī)值所得到的結(jié)果。由于它的參數(shù)是由CPU時(shí)鐘所決定的隨機(jī)數(shù),所以這樣得到的圖形是不可重復(fù)的。
圖3 由例2的方法得到的樹(shù)
圖4 根據(jù)例3得到的模擬圖
例3:圖4中的兩個(gè)圖像,是將上述算法在OpenGL環(huán)境下應(yīng)用到三維空間后所得到的一片三維蔬菜葉和一株三維樹(shù)。其中,樹(shù)的構(gòu)造是完全空間化的,而葉則鑒于其本身的結(jié)構(gòu)特性,只是浮雕式的。可以看出,在簡(jiǎn)單的光照下,結(jié)果的逼真程度是相當(dāng)高的。
4 結(jié) 語(yǔ)
以上給出一個(gè)繪制分形樹(shù)的算法,根據(jù)這一算法同時(shí)也可以繪制植物的葉,并經(jīng)過(guò)數(shù)值實(shí)驗(yàn)得到了幾個(gè)形態(tài)相當(dāng)逼真的樹(shù)的模型。這一結(jié)果對(duì)于植物的數(shù)值模擬有一定的意義,對(duì)于美術(shù)創(chuàng)作也有一定的使用價(jià)值。不足之處在于只有陰影而沒(méi)有投影,這一問(wèn)題有待進(jìn)一步的解決。
參考文獻(xiàn)
[1]霍翠花,柴立和.生態(tài)工業(yè)系統(tǒng)的分形生長(zhǎng)理論分析與模擬[J].自然科學(xué)進(jìn)展,2007,17(11):1 583-1 588.
[2]田雨.對(duì)分形算法中遞歸法的研究[J].四川大學(xué)學(xué)報(bào),2007,44(5):990-994.
[3]程學(xué)珍,曹茂永,徐小平.基于分形的自然景物描述方法研究[J].系統(tǒng)仿真學(xué)報(bào),2007,19(21):4 957-4 959.
[4]趙慧蘭.基于分形幾何學(xué)的植物圖像計(jì)算機(jī)模擬[J].浙江師范大學(xué)學(xué)報(bào),2007,30(3):299-302.
[5]李鵬,趙德平,牛志成,等.基于廣義Mandelbrot集的分形圖像壓縮算法研究[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(8):84-85.
[6]黃天云,張傳武.分形插值算法在分形自然景物模擬中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(16):3 994-3 997.
[7]丁永勝,堵秀鳳,張水勝.Matlab分形植物模擬[J].齊齊哈爾大學(xué)學(xué)報(bào),2008,24(3):63-65.
[8]孫艷,劉弘.基于L-系統(tǒng)的植物形態(tài)模擬研究[J].信息技術(shù)與信息化,2007(5):80-81.
[9]郝衛(wèi)亮,王劍英.基于分形的三維樹(shù)木形態(tài)模型[J].計(jì)算機(jī)應(yīng)用,2007,27(9):2 137-2 139.
[10]黃瓊,徐豐.分形樹(shù)的SAR 成像模擬[J].微波學(xué)報(bào),2007,23(增刊):205-210.