基于X3D的三维分形植物建模
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于X3D的三维分形植物建模
张杰;蔡文奇
【摘要】植物的模拟一直以来都是计算机图形学的热点和难点问题,为了实现通过互联网在网页上方便、快捷地浏览具有逼真性、交互性的三维植物,论文从植物的生理结构出发,结合确定性L系统、参数L系统和原始的递归算法提出了一种植物建模的教学模型,并采用X3D结合JAVA作为实现语言,建立了树的轴结构、叶序和叶子的模型.用户只需实时地输入相应的参数,就可以快速、便捷地生成逼真的三维植物.%Plant simulation is a popular and difficult issue in computer graphics these years. In order to conveniently and quickly browse the 3D plant which is realistic and interactive on web, a mathematic model of plant-modeling based on determination L-system, parameter L-system and the original recursive algorithm is proposed from the aspect of the plant physical structure in this paper. X3D and JAVA are chosen to generate a three-dimensional plant model quickly and easily after giving related parameters. The modeling of the branch structure of tree, the leaf arrangement and leaf is realized in this paper.
【期刊名称】《图学学报》
【年(卷),期】2012(033)004
【总页数】6页(P7-12)
【关键词】计算机应用;分形树;参数L系统;生理结构
【作者】张杰;蔡文奇
【作者单位】汕头大学计算机科学系,广东汕头515063;汕头大学计算机科学系,广东汕头515063
【正文语种】中文
【中图分类】TP391
自然界的植物千资百态、种类繁多,貌似无章可循,无法用传统的欧式几何进行描述。
而分形算法的出现,将这些看似毫无规律的植物的描述和模拟变成可能。
植物的模拟是计算机图形学的热点和前沿课题之一,深深地吸引着研究者的眼球。
国内外有不少研究者运用经典的分形算法或分形算法的改进算法,借助C++、java等语言提出了二维或三维植物的建模方法。
如:Lindenmayar于1968年提出的L 系统奠定了树木模拟的基础[1],Prusinkiewicz等[2-4]于1988~1996年间提出了基于L系统的树木生长模拟系统;国内比较有代表性的成果有赵星等于 2001年提出的双尺度自动机模型,反映了枝条动态弯曲过程的力学原理[5],并于2003年进一步对花序进行模拟研究,模拟了有限花序和无限花序以及开花的顺序[6];张树兵等于2002年提出了基于L系统的植物建模的改进,将系统代码转换成简单的递归表达式结构,但生成的植物单一,没有参数化[7];张帆等于2003年提出了基于VRML的简化L系统算法[8],但生成的树没有交互性,也未提出叶序和叶子的生成算法。
模拟植物的主要分形方法有:文法构图算法(L系统)、迭代函数系统算法(IFS 算法)、分形演化算法(DLA模型)[9]。
经研究,单纯用其中一种算法来对植物建模,不但在编程实现方面比较繁锁,而且缺乏与用户的交互性。
本文一方面采用L系统与递归算法相结合的方法,可以方便地编程实现植物的建模,另一方面,X3D结合JAVA来实现建模,满足了用户的交互性的要求。
除此之外,本文提出
了基于树的生理结构的建模,包括,分枝结构、叶序、树叶。
X3D(Extensible 3D)由Web3D联盟提出,并于2004年正式通过ISO/IEC审
议成为网络三维国际通用标准ISO/IEC19775。
它被定义为可交互操作、可扩展、跨平台的网络3D内容标准,其前身是VRML97。
X3D除了有VRML97的全部功能外,还整合了XML、JavaScript、Java和流媒体技术等先进技术,拥有更强大、更高效的3D计算能力、渲染质量和传输速度[10]。
1 原理及方法
1.1 树的生理结构
1.1.1 轴结构
树枝是构成树的基本骨架,它的长短及空间排列对树的形状起着支配作用,不同的树有不同的分枝形式,主要有以下两种轴结构:
1)合轴分枝,如图1(a)所示,即顶芽生长到一定程度后就停止生长或生长速度变慢,这时侧芽将超过顶芽的生长速度,逐渐长成很大的侧枝,常见的合轴分枝树有:梧桐、桑树等;
2)单轴分枝,如图1(b)所示,即树木有明显的主干。
主干是由顶芽不断向上生
长形成的,各级分枝的生长都不超过主干,常见的单轴分枝树有:松树、杨树等。
1.1.2 叶序
图1 树的分支结构
叶在树枝上的排列方式称为叶序。
不同的植物有不同的叶序,主要分为:
1)互生,如图2(a)所示,即在树枝的每个节点上交互生长出一片树叶,叶在树枝上呈螺旋状分布,如:向日葵;
2)对生,如图2(b)所示,即树枝的每个节点上相对地生长出两片树叶并排列于
茎的两侧,如:石竹;
3)轮生,如图2(c)所示,即树枝上的每个节点上生长出3片或3片以上的叶子,
也称轮状。
如:夹竹桃;
4)簇生,如图2(d)所示,即两片或两片以上的叶子生在节间极度缩短的树枝上,如马尾松、银杏等。
图2 叶序
1.2 L系统原理
L系统描述的是植物生长的数学模型,核心概念是重写,重写是通过应用一个重写规则或产生式的集合,对简单的初始目标中的部分进行连续置换来定义复杂目标的技术[11]。
一个L系统可以表示为一个有序三元组G=<V,w,P>,其中,V是系统的字母表,w ∈ V+是一个非空字符串(称为起始字符串),P ⊂ V × V+是一个
产生式(改写规则)的有限集合,一个产生式(a,x)∈P记为a→x[17]。
本文用以下文法为基本理论建立植物模型(以二维二叉树为例)
F代表初始元,“[]”表示按要求对初始元执行偏移操作,“+”表示向左偏转,“-”表示向右偏转“{}”表示将其内部作为一个整体执行上移操作。
用此文法
构造二叉树的过程如图3所示。
图3 分形树的生成过程(n=4)
2 改进的三维L系统
2.1 改进L系统的数学模型
仔细分析用L系统生成分形树的过程,不难发现这其实是一个递归过程[11]。
本文将参数L系统和此递归过程相结合,提取出如式(1)所示的数学模型,h(0)为初始元,函数 f(i)、 g(i)为生成规则(i为整数且0≤i<n,n为设定的树的深度),i为参数,也为生成元,在每一次的递归过程中生成元i都是不同的,根据不同的参数i,就会有相应不同的生成规则P。
如当参数i=1时,则生成元 i=h(i - 1),生成规则为 f(i);当1 <i<n- 2时,生成元为 i=f(i - 1),生成规则为 f(i);否则生成元
i=f(i - 1),生成规则为g(i)。
树的数学模型的递归过程如式(2)所示
2.2 三维L系统
将上述二维的L系统扩展为三维的L系统,三维仿射是一个关键的因素。
定义:L代表原三维图形,L′代表经过三维仿射W后得到的新图形,则仿射W可表示为
上式可简化为W:L′ = L·A +T,可通过改变三维矩阵A、T即可实现对三维图形的旋转、平移、按比例缩放等操作,如
分别表示原图形L绕X轴、Y轴、Z轴旋转一定弧度α;
· 若则表示原图形L按比例s进行等比例缩放;
· 若 T= (0 ,h,0 )T,则表示L沿Y轴方向平移h。
3 用改进的L系统建立植物模型
在以上理论中,需用链表结构来表示二叉树,这样编程实现的效率较低。
本文用X3D结合JAVA的方式实现建模,大大简化了程序的复杂度,同时也满足了用户实时性和交互性的要求。
一方面 X3D中定义了很多几何图形节点和材质等域,利用这些节点和域就可以简单快捷地生成三维的初始元图形;另一方面,为了节约内存等开销,降低编程的繁琐度,使用户可随机地生成想要的图形,本文用JAVA来实现用递归结构来代替链表结构。
3.1 树的分枝结构的建模
用n(n>0)表示树的层数,以控制整个程序的递归次数;用t(t>0)表示t叉树,即
一个主干上有t个分枝;用 b(b <n- 2)控制是否生成合轴分枝树,若b=0则生成合轴分枝树,否则生成单轴分枝树;用 m(m> 0)控制每根树枝上叶序簇的数量;
树干的粗细、长短分别用比例系数trs、tls来控制;wt控制树枝与父枝的夹角;
wl控制叶序簇与父枝的夹角;用比例系数ls控制叶序簇的大小比例等参数。
1) T是由Cylinder节点定义的一个半径为r[j],高度为h[j]的圆柱体并沿 Y 移动- h[j]/2,r[j]、h[j](0 ≤j<n)的值分别由式(3)、(4)得到
2)定义Tmax +=T[a ](0 ≤a<t-1),复制G[ j- 1]并以原点和点(0,h[j]·cos(w t),h[j]·s in(wt))的连线为旋转轴旋转一定弧度3.141/(n+a),然后沿Y轴平移 -h [j]·(a +1)· ts /n ,所得结果记为T[a];
3)如果j = 0(0 ≤ j<n),用内联节点Inline读取生成的叶序节点leafArrangement.x3d,并用transform 节点G[0]使其绕X轴旋转一定弧度-wl,然后等比例缩放ls,所得结果记为g[0];
4)如果 j=1,则使G[0]绕Y轴旋转一定弧度6.282 (a+1)/m,并沿Y轴平移 -
h[j]·(a + 1)·ts/m,记为T1[a],重写Tmax,并命 Tmax +=T1[a];对
L=g[ 0]+Tmax +T沿Y轴平移h[j],然后绕X轴旋转一定弧度wt,得到的结果
记为g[1];
5)如果 j=n-1,定义stbe += tbe[i](0≤i<b),tbe[i]代表将 G[n -i- 2]绕 X轴旋转一定弧度-wt,再绕 Y轴旋转一定弧度4.2115/(b+1),然后沿Y轴平移TH[i],变换后的图形加上用 Cylinder节点生成的半径为r[n -i- 2],高为 h[n -i- 2]的圆
柱并沿Y轴移动TH[i]- 0.5h[n -i - 2]得到的图形,其中TH[i]的值可用式(5)得到,则 g[j]= g[ j- 1]+Tmax +T+st be ;
否则将 g[ j - 1]+ Tmax + T 沿Y轴平移h[j],然后绕Y轴旋转一定弧度wt,此
变换记为G[j],所得图形记为g[j];
6)输出图形g[n-1],即为最终结果。
只要输入不同的参数就可以得到不同的树,其中生成的部分分形树效果图如图4所示。
图4 生成的分形树
3.2 树的叶序结构的建模
在叶序的生成过程中,用n控制递归次数,用 m来控制中间生成元中树叶的树木和叶序的种类,用w控制树叶与父枝的夹角,用α控制树枝的弯曲度。
以下为具
体算法步骤:
1)用Cylinder节点生成树叶所附着的树枝stick,高度为H,并将stick上移
H/2;
2)如果m=1,即要生成互生叶序,则用内联节点Inline读取生成的树叶节点leaf.x3d,并绕X轴旋转一定弧度w,然后沿Y轴平移H,所得结果记为t [0];
复制t[i-1],并绕Y轴旋转一定弧度1.5705,然后沿Y轴平移-H/m,所得结果记为t[i](其中0≤i<m);
3)如果m=2,则即要生成对生叶序,则用内联节点Inline读取生成的树叶节点leaf.x3d,并绕Z轴旋转一定弧度w,然后沿Y轴平移H;继续导入leaf.x3d,,并绕Z轴旋转一定弧度-w,然后沿Y轴平移H;
4)否则就生成轮生或簇生叶序,则用内联节点Inline读取生成的树叶节点
leaf.x3d,并绕Y轴旋转一定弧度6.282(c/ m+ 1)/m,然后沿Y轴平移 - H·c/
m2,所得结果记为t [0];复制t[i-1],并绕Y轴旋转一定弧度1.5705,然后沿Y 轴平移-H/m,所得结果记为t[i](0 ≤i<m )。
若c=0即为轮生叶序,否则为簇生
叶序;
5)将以上生成的图形记为G[0];
6)将G[j-1] 绕X轴旋转一定弧度α,然后沿Y轴平移H;复制G[j-1],将此步
骤中生成的图形记为G[j](0 ≤ j<n );
7)输出图形 G[n - 1],即为最终结果,生成的叶序效果图如图2所示。
3.3 树叶的建模
绘制树叶模型的基本思想是先画一个三角形△ABC,然后以△ABC为生成元,对它
进行旋转、缩放等操作,然后将之前生成的总图形作为生成元重复以上步骤就可以得到想要的结果。
在建模的过程中,用n来控制递归次数,用参数y来控制线段AB的初始长度,用β控制△ABC的宽度,用s控制线段AB与AC的长度差异,
用α控制叶子的弯曲程度。
具体算法步骤如下:
1)给定初始坐标 A( 0,0,0)和 B (0 ,y,0 ),用公式(6)求得三角形另一个顶点
C(x ′,y′,z′),其中∠C AB = β,s为线段AC的长短比例(A点坐标不变),画三角形△ABC得到图形L[0];
1)将上一步中得到的图形L绕Y轴旋转一定弧度α,然后绕Z轴旋转一定弧度β,得到新图形L′;
2)将L[0]按比例 s[i]= 1 + 0.2i缩放(A点坐标不变)得到图形L[i];
3)将前面所有步骤中得到的总图形L+L[i]作为新的图形L并返回步骤2),重复
n次,就能得到想要的叶子图形。
生成的树叶模型如图5所示,有椭圆形、针形、菱形、掌形、扇形等,只要输入
不同的参数就可以生成不同的叶子模型。
图5 生成的叶子
4 结束语
本文针对传统L系统编程实现繁琐,生成的图形没有随机性的不足,提出了用
X3D结合JAVA来轻松实现三维图形的建模,以上所介绍的系统不仅可以生成逼
真的三维树,还可以通过设置不同的参数,生成花、草等其他三维图形,除此之外,
可用改变参数的方式,运用 X3D中生成动画的节点可生成动态的图形,如树木的生长过程,花开的过程等。
因此,本方法还是有一定的推广价值。
参考文献
【相关文献】
[1]Lindenmayer A. Mathematical models for cellular interactions in development [J]. Journal of Theoretical Biology, 1968, 18: 280-315.
[2]Prusinkiewicz P, et al. Developmental models of herbaceous plants for computer imagery propose [J].Computer Graphics, 1988, 22 (4): 141-150.
[3]Prusinkiewicz P, et al. Synthetic topiary [C]//Computer Graphics Proceedings, Annual Conference Series,ACM SIGGAR PH,Orlando, Florida, 1994: 351-358.
[4]Mech R, Prusinkiewicz P, et al. Visual models of plants interacting with their environment [C]//Computer Graphics Proceedings, Annual Conference Series,ACM SIGGAR PH, New Orleans, Louisiana, 1996:397-410.
[5]赵星, DeReffye P, 熊范纶, 等. 虚拟植物生长的双尺度自动机模型[J]. 计算机学报, 2001,
24(6):608-617.
[6]赵星, DeReffye P, 熊范纶, 等. 基于双尺度自动机模型的植物花序模拟[J]. 计算机学报, 2003, 26(1):116-124.
[7]张树兵, 王建中. 基于L系统的植物建模方法改进[J].中国图像图形学报, 2002, 7(5): 457-460.
[8]张帆, 谭建荣. VRML环境中3维分形植物的生成及应用[J]. 计算机工程, 2003, 29(21): 110-112.
[9]孙博文. 分形算法与程序设计[M]. 北京: 科学出版社, 2004: 61-216.
[10]张金钊, 张金锐, 张金镝. X3D 虚拟现实设计[M].北京: 电子工业出版社, 2007: 7-8.
[11][加]Prusinkiewicz P, Lindenmayer A. 植物的算法美[M]. 孟军, 邓华玲译. 北京: 科学出版社,2008: 1-3.。