[发明专利]一种基于GPU的实时动态水面模拟方法无效
申请号: | 200810063008.7 | 申请日: | 2008-07-04 |
公开(公告)号: | CN101320480A | 公开(公告)日: | 2008-12-10 |
发明(设计)人: | 潘志庚;潘卫敏;张明敏;刘剑锋 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06T15/00 | 分类号: | G06T15/00;G06T17/00;G06T1/20 |
代理公司: | 杭州求是专利事务所有限公司 | 代理人: | 张法高 |
地址: | 310027*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 gpu 实时 动态 水面 模拟 方法 | ||
1.一种基于GPU的实时动态水面模拟方法,其特征在于包括如下步骤:
1)使用HLSL语言编写基于Directx Shader的FX效果文件,在FX效果文件中同时包括顶点着色器和片段着色器;
2)在3DS Max中建立水池模型,水池模型包括池壁和池底,池壁是一个圆环,池底是一个圆形平面,其中池壁的材质采用磁砖贴图,池底的材质采用鹅卵石贴图;
3)在建好的水池模型当中,额外增加一个圆形平面,用于显示反射和折射颜色,圆形平面的大小和池底的大小一致,它的位置相对池底往上一点,圆形平面的材质采用DirectX Shader,在3DS Max的材质编辑器中选择已经编写的FX效果文件,按编辑器的要求选择法向贴图,并按照普通贴图的方法映射到网格顶点上,作为每个顶点的法向,此外,还设置反射纹理和折射纹理,避免在程序当中没有设置反射和折射纹理的情况下出错;
4)在三维应用程序中加载由3DS Max建立的水池模型,以及对应的FX效果文件,并设置FX效果文件的全局输入,全局输入包括变换矩阵,摄像机位置,当前时间片;
5)根据当前的摄像机位置,把场景渲染到帧缓存当中,并把它传递给FX效果文件作为折射纹理;
6)求得水平面的平面方程Ax+By+Cz+D=0,把摄像机变换到与水平面对称的位置,再次对场景进行渲染,把渲染得到的结果传递给FX效果文件作为反射纹理。
2.根据权利要求1所述的一种基于GPU的实时动态水面模拟方法,其特征在于所述的使用HLSL语言编写基于Directx Shader的FX效果文件,在FX效果文件中同时包括顶点着色器和片段着色器步骤下:
(1)声明FX效果文件的输入纹理,以及它们的采样方式,这些纹理包括作为法向贴图的纹理、反射纹理和折射纹理;
(2)声明作为全局输入的变换矩阵、时间变量、摄像机位置的变量,以及它们的类型;
(3)编写顶点着色器例程,顶点着色器例程的输入是顶点的位置以及纹理坐标,在顶点着色器例程的内部,需要把顶点变换到世界空间中的位置,然后利用纹理坐标从法向贴图中得到该顶点的法向量,并对法向量添加扰动,其扰动幅度的计算公式如下:
D(t)=frac(α*t)公式1
其中t是全局时间,α是浮点常量,frac函数是由GPU提供的小数部分截取函数,然后根据公式2和公式3计算每个顶点的反射和折射向量:
其中-顶点位置,-顶点法量,-摄像机位置。
其中
把变换后顶点的位置,纹理的采样坐标,作为结果返回该例程,然后将该结果作为片段着色器的输入。
(4)编写片段着色器例程,片段着色器例程把顶点着色器例程的结果作为输入,通过GPU提供的采样函数tex2Dproj,对反射纹理和折射纹理进行采样,得到水面显示出来的反射颜色Creflect和折射颜色Crefract,根据菲涅耳现象,按照公式4把两个颜色进行混合:
Cwater=FCreflect+(1-F)Crefract 公式4
对于菲涅耳系数F,采用简化的模型进行计算:
其中为视点到顶点的单位向量,为单位法向。
3.根据权利要求1所述的一种基于GPU的实时动态水面模拟方法,其特征在于所述的求得水平面的平面方程Ax+By+Cz+D=0步骤:在求平面方程的时候,根据平面上的三个顶点,求得两条向量,把两条向量进行叉积得到A、B、C参数的大小,再把一个顶点代入方程,求得D的值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810063008.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种改进的安全自毁式注射器
- 下一篇:用于进行X光摄影的被摄影物的保温装置