海洋模拟
来源:互联网 发布:mac手机铃声 编辑:程序博客网 时间:2024/06/03 02:29
http://www.cnblogs.com/wubugui/p/4541812.html?utm_source=tuicool&utm_medium=referral
本文基于[Jerry Tessendorf 2004]的方法对海洋动画进行了模拟
1、介绍
海面模拟是计算机图形领域研究前几年很热门的问题,也是一个挑战,在这方面的主要问题是对大面积开阔深水区域的模拟,在这种情况下使用传统模拟3D流体的方法将意味着极其巨大的网格,以及海量的运算,使用这种方法在普通的计算机上是几乎不可能模拟出来的。然而[Jerry Tessendorf 2004]提出的基于高度场y=h(x,z)的水面模拟,为普通计算机模拟海面提供了可能,甚至在现代大规模GPU计算下也能进行实时模拟。而我们对海面的视觉模拟则相对简单。
2、基于快速傅里叶变换的海面模拟
基于流体方程的模拟公式
对于大规模水域,远离海岸线的相对平静海面u被假设为无旋场,有,其中是某势场,根据不可压缩条件所以对其使用伯努利方程得到
线性化方程
进一步假设u足够小且没有巨浪去掉二次项得
定义海面为0高度有
U = gh
根据质量守恒有
设x=(x垂直,y),y指向水面之下有,那么可以假设表面方程有如下形式
这个式子考虑左边因子为零有
设压力为0有
(20)
联立上述两个方程有
(21)
方程(20)(21)最终描述了海面的运动
方程(21)两边同时求导,带入方程(20)最终得到
为了解决这个不寻常的符号求两次导数,最后得到
方程的解
我们给出一个特殊解分量形式:
将这个式子带入原方程,得到
这里k是index向量的模,对于这个方程我们取,这个值称为色散关系(Dispersion Relation)
再考虑xz方向边界条件具有周期性,使用NxN的网格来度量h的xz平面L是实际尺寸,那么在指定时间t网格索引为的点的高度为
为了使得和项只有实数部分对Cos项经过变换即得
式中h0项为波普参数,使用这个式子可以执行FFT来计算结果。
基于统计模型的海洋波普
对于上式的变换,[Jerry Tessendorf 2004]提出使用基于统计的现象模型,所以我们使用了一个海洋学统计模型Phillips spectrum,这个模型的所有原始数据来自于多年海洋学观察,优点是可以选择风速和风向,他的经验公式是:
为了具有随机性我们使用高斯分布来取得随机波普:
现在h0项已经有了明确的定义可以计算数据带入了,我们在核心代码部分给出计算代码。
基于GPU的快速傅里叶变换
这个前面的博文已经讲过了就不再说了
FFT算法实现——基于GPU的基2快速傅里叶变换
2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
- 海洋模拟
- 【UE4-shader】顶点动画模拟海洋起伏
- 海洋源代码
- 数字海洋
- 知识海洋
- 沉默的海洋
- 周传雄【男人.海洋】
- 海洋动物活化石--鲎
- 爱的海洋
- 海洋科技工作室
- 简历的海洋
- 海底下面的海洋
- Ogre海洋Demo注释
- 《海洋天堂》观后感
- Hydrax海洋插件
- 知识的海洋
- 知識的海洋
- 爱的海洋
- Unity3D Shader 新手教程(1/6)
- codeforces round 345 div2 Image Interview 贪心 + 二分
- 请不要做一个浮躁的嵌入式工程师
- C# 第14章 上机3,4,5
- Fizz Buzz 问题
- 海洋模拟
- Mysql多实例安装+主从复制+读写分离 -学习笔记
- mysql解压缩启动问题
- golang fork 系统资源共享可行性验证
- 对测试人员或开发人员来说相互沟通有多重要?
- leetcode-300-Longest Increasing Subsequence 动态规划
- JQuery在XSS攻击中的表现
- 算法练习题——坐出租车
- nginx负载均衡搭建