基于分形的三维海面研究及生成
2020-02-01
来源:好走旅游网
i誊 彀 萼 基于分形的三维海面研究及生成 ◆庄建东曾勇进 (集美大学计算机J二程学院计算机教研室) 【摘要】本文根据海浪的自然形态特征,基于分形理论的分形布朗运动FBM(Fractal Brown Motion)原理中的随机中点位移算法——菱形 方形法,给出了分形三维静态海面的模拟生成算法。为了实现海浪运动的效果,需将构成海面点的高度值设为随时间和空间变化的函 数,在考虑风力因素的条件下给出了三维海浪运动的几何模型和相应的模拟生成算法。并以Windows XP为平台,采用Microsoft Visual C ++2010为编程工具,使用OpenGL开放图形库为3D图形建模库的开发环境下实现了三维海面的计算机模拟。 【关键词】海浪模拟 分形 随机中点位移算法 分形布朗运动 菱形方形法三维海面 1引言 这样在第一次细分过程中可以由一个正方形生成4个正方形,如图1 虚拟自然环境如地形、植物、海浪、云和火焰等的计算机模拟一直是计 所示。其中●为初始正方形角点,0为根据4个初始正方形角点生成的初 算机图形学的重要研究课题之一,其中海浪的模拟相比其他自然环境的模 始正方形中点,●为根据4个初始角点和生成的正方形中点计算出的正方 拟更为复杂和困难。当前对于海浪模拟仿真的建模方法根据具体实现原 形4边中点,这样就生成了4个新的正方形,同时计算各个点的高度值。以 理可分为:基于计算流体力学方法、基于海浪谱方法、基于几何造型方法和 此类推,第二次细分可生成16个正方形,第三次则可生成64个,经过j次 基于分形几何方法。 细分生成的正方形为2 个。 基于计算流体力学的方法虽然能够生成逼真的海浪运动效果,但是由 由于生成各点高度不同,经多次迭代后可生成一个近似曲面,这个曲 于其求解过程过于复杂,在实际应用中一般很少使用。基于海浪谱方法只 面与真实海浪形状比较接近,但是由于Pc机硬件性能所限,迭代次数不能 能模拟海浪的波动效果而不能模拟海浪的翻转卷曲效果。基于几何模型 过多,以避免大量运算可能产生的计算错误。 方法是根据海浪的形态特点,选择几何曲线或曲面构造连续变化的海浪形 状。基于分形几何方法一般采用FBM方法,生成海浪的分形曲面将生成点 的坐标设定为时间和空间相关的函数,进而生成海浪效果,同时通过插值 的方法保证图像的连续性有,因而在实际得到广泛应用。 ;0j-; i 0 牛 -;.-0 ■■● } } }! _l{ |¨ ' ■ ■ ● } ● {l ●● { ●● { m- {7◆●t◆ 本文希望通过对海浪模拟仿真的建模方法的深入研究,以便能更好地 了解和掌握如何通过计算机实现模拟自然界中的自然景观技术打下基础。 2静态海浪生成的原理及算法 分形几何学的基本思想是:客观事物具有自相似的层次结构,局部与 图1菱形一方形细分法 2.2基于分形的三维静态海浪建模及实现算法 2.2.1分形海面绘制算法 为了实现海浪运动效果,首先需要画出静态海浪曲面,没分形前是1 个正方形,第一次分形产生4个正方形,第二次细分可生成16个正方形,第 整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似性,成为 三次则可生成64个,经过i次细分生成的正方形为2 个。 自相似性。而悬浮微粒永不停息地做无规则运动的现象叫做布朗运动。 同样由于Pc机硬件性能所限,迭代次数不能过多,以避免大量运算可 分形理论最早是由美籍数学家曼德布罗特提出的,分形的重要特征之一就 能产生的计算错误,本课题最多只采用8次迭代。如图所示经过8次分形 是自相似性,而海浪就可以看作是周期性的不同尺寸波形的叠加,这些不 迭代所生成的静态海浪曲面效果图。 同尺寸的波形具有大尺度相关而小尺度相似的特征,且空间各向近似同 性,即海浪具有自相似的特征,由这种自相似性可看出海浪具有分形特征。 基于这个特征,可以利用少量数据生成具有较强真实感和实时性的海浪波 动效果。 分形布朗运动(Fractional Brownian Motion)是由B.Mandelbrot和、V. Ness于1968年针对随机布朗运动的推广,提出的一种统计自相似过程的 数学模型,主要用于生成布朗运动过程。 中点位移又叫做随机中点位移法,是最简单和经典的方法,是对分形 布朗运动的直接应用。一维随机中点位移法的思想史:针对某一已知端点 图2 八次分形迭代的静态海浪曲面效果图 基于FBM方法的曲面生成算法如下: (1)确定迭代初始正方形个数g及迭代次数n。 (2)确定随机函数方程g()=(rand()%(r一1)一r/d)。 (3)初始迭代次数m=0,然后对初始正方形的4个角点分别赋予随机 高程(或属性)的线段,其线段中点的高程(或属性)为其两端点高程(或属 高度值hA、hB、hc、hD,并将生成的坐标保存到坐标数组中。 性)的平均值再加一随机位移量,位移后的两线段再进行上述中点细分并 (4)令当前迭代次数m=nl+1,计算当次迭代所生成的所有点的坐标 位移,递归直到满足所需的分辨率为止。将其推广到二维,依据表面构网 值,并保存到坐标数组中。 方式的不同,其模拟可分为三角形边线细分法、方形一方形细分法、菱形一 (5)重复第4步,直到当m=n—l时为最后一次迭代过程,结束迭代。 方形法等方法,其实现思想与一维类似。本文采用的是菱形一方形法。 (6)使用纹理映射方法将海浪源纹理映射到生成的曲面上,生成海浪 2.1菱形一方形法 分形图形。 海浪分形曲面的生成使用FBM插值方法中的随机中点位移算法.随机 中点位移算法一般包括三角形边界法、方形法、菱形法、菱形一方形法等, 3运动海浪的生成的原理及算法 下面介绍本文所采用的菱形一方形法. 如图1所示,首先从一个正方形的4个角点开始,这4个角点A、B、c、 的运动形态可以看作是由一系列具有不同频率、波数、波高和传播方向的 D分别具有不同的高度值hA、hB、hc、hD值,然后计算出中点0的高度值 规则波叠加而成,类似于简单三维进行波,根据海浪的这种运动特征可以 h0。再根据4个角点的位置计算出四边形各边中点位置,同时计算出各边 使用多个正弦或余弦波叠加来近似地表示海浪的运动形态。 中点的高度值: hO:(hA+hB+hC+hD)/4+g0 海浪的运动特征很复杂,主要表现为形状不规则,具有复杂性和随机 性。海浪的运动特征,可以概括为近似周期性的规则波形的叠加,即海浪 hE=(hA+hB+hO)/3+gE hF=(hB+hc+h0)/3+gF hG=(hc+hD+h0)/3+gG hH=(hA+hD+hO)/3 gH 3 1海浪运动的几何模型 基于分形方法生成的海面是静态的,为了实现海浪运动的效果,需将 构成海面点的高度值设为随时间和空间变化的函数,而海浪的运动形态可 以看作是由一系列具有不同频率、波数、波高和传播方向的规则波叠加而 成,类似于简单三维进行波,它的单一波形分量形式为: Y (X,Z,t)=A sin(kix一【l】.t+‘p)COS(k z一(I) t+‘P ){1) 158 11/2011 一 毫 缸 冀 纛 | 景 戡 鲁 c xt , 1) ^ _jIl(k x c ' 寸 )c() (k __ {_ {{})) (1) 3.4.3双缓冲技术 l}‘t}s,4为波{ . 矧峨波的波数:Iq为频牢; 为随帆州 霸;I为Il、冲q蹙 矗 封jj幺 双缓冲区的窗口执行绘图命令实际上是在画面以外建立一个场景,然 后很快地交换到窗口视图中。OpenGL中使用双缓冲技术,使用函数 glutSwapBuffers(J交换缓冲区,将图形缓冲区内容交换到当前画面显示缓 托t、, { (FJi ̄\ i }’王]1 冲区,图形缓冲区和当前画面缓冲区的显示数据交替出现,这种方式可以 也就是说,在t时刻的波面可以看成是具有不同波高和不同频率的n 减少单一当前画面缓冲区由于计算延迟产生的闪烁现象,能有效地提高模 《r :,,)。二 鼻sin(k ’ f_ )c0s(k,:… I ,。r野) 2) 个波的总和。下面介绍各个参数的确定方法。 表I 风级、波浪高度和波动周期的仿真参数 3.2海浪运动模拟算法 为了模拟海面的运动效果,须将分形海浪生成点的波高设为与时间相 关的函数,使其随着时间变化产生运动效果,具体实现算法如下: I【1』阪出分膳 姆lf{ l} } 点 }q (x.、 zj 2)将‘ 枷、改 ‘为 J州 州冀的函数,即波;疆 蔼艘 l_魑荷{I'j问 化 (:{)根拂 输入的 ,川=j ‘,坎}嫩表 埘 ) 蔡墩 };协 波 硝属和I仿 捌朗7:. }钟 I l,7 ,"橄扭 Ⅵ 2 辩汁辩…矧成波的波教t, 卜n 晒帆棚 加 i)般州M {2 l n 2w的2 √ 戈血的 艘并觚d.,似掰均匀艘参数j|{斡Ⅲ 插 傅点个数 一if|_((f I)。 ,一, f 5 J j"《^ 1 ,: , ):( j’+ . {)十( 一 L)n l‘.:, 7)~( ,J1J:、 f" .f2一, i}辨捕flil・ ^‘ I 、他, ,) 一l (6) l 珂;f j ,“ 《p 0,动态*“ } 嫩 (7 J涮川帅㈨( J嘲敞 “,n m)¨Ⅲ1 (),改 疑小形式为烈缀冲,绘捌海浪;楚 却 像. 潮Ⅲs hi rf {s1) 撷缓仃 {像.将缓 缘绘制到 时嘲 在八级海浪的情况下,经过第七次迭代其效果如图3所示。 图3 八级海浪的第七次迭代效果图 3.4提高海浪运动模拟效果的OpenGL方法 3.4.1纹理映射技术 纹理映射是将一个纹理图像映射到三维物体表面来模拟景物表面细 节的方法,是真实感图形生成的有效途径。实时模拟海浪波动效果时,如 果对所有质点都使用FBM方法生成进行模拟,那么当前的Pc机性能无法 同时保证模拟出的海浪效果的真实性和实时性。为此使用了具有四方连 续性的海浪图像作为纹理源贴到生成的每个正方形上。如图4所示,这样 不仅可以有效地提高模拟效果的真实感,还能大大减少计算量,提高模拟 的实时效果。 图4纹理映射技术生成的三维海浪表面 这里采用的方法是使用OpenGL中的gl—Teximage2D()和glEnable(GL TEXTURE_2D)函数来实现纹理映射。 3.4.2源纹理拉伸技术 在使用纹理映射时,由于源纹理图像的大小是固定的,但是使用随机 中点位移算法的菱形方形细分法生成的分形海面时由多次迭代生成且大 小不一的正方形构成,这些正方形大小与源纹理图像大小不一定相同。这 里使用了OpenGL中的glTexParameteri(GL—TEXTURE_2D,GL—TEXTURE— MIN/MAG_FILTER,GL_LINEAR)函数解决了这个问题,如图5所示,当源 纹理图像大于映射的正方形时使用MIN参数,反之则使用MAG参数。 图5 源纹理拉伸技术生成的三维海浪表面 拟效果。 3.4.4 OpenGL显示列表 采用显示列表方式绘图一般要比瞬时方式快,尤其是显示列表方式可 以大量地提高网络性能,即当通过网络发出绘图命令时,由于显示列表驻 留在服务器中,因而使网络的负担减轻到最小。另外,在单用户的机器上, 显示列表同样可以提高效率。因为一旦显示列表被处理成适合于图形硬 件的格式,则不同的OpenGL实现对命令的优化程度也不同。 3.4.5雾化效果 雾化是一种模拟自然界中雾气对场景物体视觉效果产生影响的图形 绘制技术。此技术从视点到物体逐渐将物体的绘制颜色淡化,直至背景 色。通过雾化处理可较好的表现出物体到视点的距离感。虽然雾化的具 体计算非常复杂,但在OpenGL中的使用相关函数进行处理却非常简单。 3.5海浪运动模拟的实现及结果分析 通过采用点高度值替换的方法可以比较好的模拟现实中的海浪运动 的效果,既把后一点的高度值替换前一点的高度值,这样就可以实现海浪 的向前推进和海浪具有波动的效果,达到了比较好的实现效果。 4结论 本文理论主要源于分形几何学,以分数布朗运动数学模型为基础,进 行分形三维海浪表面的建模和分形海浪运动仿真生成技术的研究和应用, 通过对海浪的具体形态分析,得出了海浪的分形特征。根据FBM方法中的 随机中点位移算法,具体采用菱形一方形法,生成了海浪分形曲面。在分 形海浪的建模过程中,采用二维高斯随机插值算法,进行随机分形海浪,实 现海浪的分形。其次海浪的运动形态可以看作是由一系列具有不同频率、 波数、波高和传播方向的规则波叠加而以分形理论为基础,依据高度迭代 方式,实现分形海浪的运动,并根据具体海浪运动特点,结合风力对海浪运 动效果的影响,同时采用纹理映射技术、源纹理拉伸技术、双缓冲技术、 OpenGL显示列表、雾化效果等OpenGL方法提高海浪模拟效果的真实性和 实时性,以Visual C++为开发平台,通过调用OpenGL的接口函数进行二 次开发,实现了对三维海浪运动的计算机模拟,较好地实现了海浪运动的 效果。 本课题虽然实现了三维真实感的海浪的场景构造,但是对于构建完备 的三维浪花而言,仅仅是完成了该系统的基础性建模和真实感科学算法的 实现过程,这些工作为构建完备的三维浪花系统打下了坚实的基础。在此 基础上,应该加大对自然海浪的特征的研究,采用多种数学模型,以求满足 构建各种自然海浪的需要。 参考文献: [1]曾文曲,王向阳.分形理论与分形的计算机模拟.沈阳:东北大学出 版社,2001.1—102. [2]黄心渊.虚拟现实技术与应用.北京:科学出版社,1999,7. [3]刘浩,戴居丰,杨磊等.虚拟现实技术及其应用研究.微计算机信 息,2005,21(1):200—201. [4]BAENSLEY M F.Fractla Everywhere[M].New York:Academic Press,1993. [5]吴斌,段海波,薛凤武.OpenGL编程权威指南.中国电力出版社, 2001,8. [6]孙博文.分型算法与程序设计——Visual c++实现[M].北京:科 学出版社,2004. [7]BAENSLEY M F.Fractal Functions and Interpolation[J].Construe— tive Approximation,1986,(2):203—329. [8]王子凡,林宗坚.基于图像表面积的分形布朗运动分数维算法研究 [J].武汉大学学报,2005,30(2):161—165 [9]王琰,曾兰玲.基于分形的三维竹子算法[J].中国图像图形学报, 2007,12(1):177—182. 11/2O11 159