基于OpenGL的流体交互式仿真

基于OpenGL的流体交互式仿真摘要:为避免二维波方程中的大量计算,使用二维波动方程的中心差分近似来模拟流体运动。在该方法上实现了基于物理的浮力和阻力模型,模拟物体在流体表面的漂浮。在OpenGL上实现上述方法,实验证明该方法实现简单,大大降低了运算代价。??关键词:虚拟现实;流体;波动;栅格;仿真??中图法分类号:TP391.9文献标识码:A:1001―3695(2007)02―0186―03近几年来,随着计算机硬件技术和计算机图形学、三维仿真、虚拟现实等技术的快速发展,实时模拟真实的室外环境成为可能,而动态的流体对任何室外游戏场景都可以增加极大的美感。国内外的学者对流体模拟进行了许多研究,如Trim[1]将水面看作一个绷紧伸展的弹性膜,忽略其重力,采用偏微分和积分来模拟水面,但这种方法计算量大。Press将流体表面分隔为大小平均的栅格,将上述积分变化为离散操作,利用快速傅里叶变换(FFT)进行计算,成功地简化了上述方法,但在交互式应用中,如果栅格较大,其计算代价也高得惊人[2]。采用纹理映射中对纹理矩阵操作的方法可以非常简单地实现浮动的海面[3],但逼真度低且无法实时模拟物体在水面上的移动情况。通过计算级数中重要的项也可以得到近似解,虽然该方法直接且稳定,但效率很低。因为大多数的CPU计算一个三角函数要用大约30个周期,即使沿x,y方向仅取三个频率最大的值,每个时间间隔每一点也要计算九个正弦函数,对于交互应用中较大的栅格其代价更高。为减少运行的代价且方便实现与水面漂浮物体的交互,本文通过使用二维波动方程的中心差分近似,使每个点仅用几个算术运算就能模拟流体表面的水平运动。在这种表面的基础上,对漂浮物体进行受力分析,实现了物体在水面中的交互式模拟。??1流体表面的模拟实现??流体的仿真一般采用如下的二维波方程:??其中常数c代表每单位时间位移的距离,即流体的速度;μ为非负常数,代表流体的黏性,该值大体上决定了波在一种表面上传播的距离,也就是波消失的时间。较小的μ值可以让波存在时间较长,适合模拟水波;较大的μ值会导致波的快速消失,如黏稠的油波。本文假设边界条件是齐次的(即边缘不作上下运动),且流体表面的初始速度为0,对于一个L×L大小的正方形流体表面用三角形网格连接,网格的顶点排列成平均分隔的栅格,如图1所示。式(1)的二维波方程可以用分离变量的解析方法求解,但其求解过程十分复杂、效率低,在实时仿真时需要相当大的计算量。为简化运算,采用近似导数方法模拟波在流体表面的传播过程。??1.1波动的模拟偏导数实现1.2不稳定性的限制1.3边界的反射水域通常不是正方形的,河流、湖泊和海洋有着不同斜度的不规则海岸线,而且岛屿也可能存在于水域内部。如果水岸非常陡峭甚至是垂直的,波浪从海岸线反射回来就几乎不会失去能量;然而如果水岸是倾斜的,波浪的反射波可能会非常弱,或根本没有。如果波浪不是垂直击向岸边,那么就会以某个角度反射回来。可以通过一个本地阻尼系数di,j调节zn+1的值来模拟。系数为1表明允许在高度值上自由运动而不损失任何能量;系数为0代表限制在那个位置水域的所有运动。如果这些系数是根据地形特征来分配和调节的,波浪对海岸线做出的反应就更自然。例如,如果海岸是陡峭的,阻尼系数就应该从1(水)到0(陆地)作一个快速的转变;如果海岸是逐渐倾斜的,阻尼系数就应该从1渐变到0。实际上,将略小于1的阻尼系数用于“湿的”栅格比较好,可以产生较少的能量损耗;否则波动会无限地延续下去。1.4算法的具体实现??为避免在时刻t-1,t0,t1的Z值存储三个栅格,将zn-1被zn+1适当代换,只需要两个栅格,通过在传递结束时,指向zn+1和zn的值的内存指针进行交换实现。因此开辟两个缓冲区,每一个为包含n×m个顶点位置的数组。在显示每一帧时,包含当前顶点位置的缓冲区称为当前缓冲区,包含上一时间段的顶点位置的缓冲区称为旧缓冲区。在计算顶点的新位移时,需要用新的顶点位移更新旧缓冲区中的顶点位置,则当前缓冲区成为下一帧中的旧缓冲区,而旧缓冲区则成为下一帧中的当前缓冲区。这样,交替使用这两个缓冲区进行流体表面的显示。??2与水面交互??为真实模拟水面波动,必须...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?