游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9595|回复: 3

d3dx9做的波浪水面效果

[复制链接]

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
发表于 2011-12-4 15:34:00 | 显示全部楼层 |阅读模式
波浪水面效果,2011年过年的假期做的,源于FX COMPOSER里的 sample海洋效果,这里把源码挂上
具体原理的解释有空再来写了


33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
 楼主| 发表于 2011-12-4 16:26:00 | 显示全部楼层

Re: d3dx9做的波浪水面效果

晕,回复的时候发现没办法放图上去
原理解释:
本例使用的波浪分为两种,物理波浪与纹理波浪,
物理波浪为FX文件里面定义的
truct WAVE
{
        float freq;                //wave's frequency =2*PI/wavelength
        float amp;                //amplitude
        float phase;        // = speed*2*PI/wavelength
        float2 dir;                //wave's moving direction at a plante XY
};
//in this sample ,dana use 2 sin waves
WAVE wave[NWAVES]=
{
        {1.0,0.15,0.5,float2( -1.0,0.0)},
        {2.0,0.10,1.3,float2(-0.7,0.7)        },

};
这里定义了两重的物理波浪,第一重是波幅0.15方向 -1.0,0.0
第二重物理波是波幅0.10 方向-0.7,0.7的
显示时,使用两重物理波叠加来模拟波浪效果。

纹理波浪:这个例子里的纹理波浪不是真正的纹理,是一张wave.dds的法线图取样而来,虽然使用切空间,但进顶点SHADER的时候顶点的定义为:
struct V_IN
{
        float4 v4Pos        OSITION;
        float2 v2Tex        :TEXCOORD0;
        float3 v3Normal        :NORMAL;
};
即没有TANGENT 与BINORMAL的定义,所以,嘿嘿,顶点的切空间是在顶点着色器里虚拟建立的(建立切空间的那段基本上完全源自FX COMPOSER里的例子,当然,个人感觉这个切空间做的不是很合理,如果对切空间不能理解,可以到网上找相关文章,或者QQ我)。
有了切空间后,就可以从法线图里面找出模型上每个点对应的法线,进入光照模型计算COLOR,
本例使用了3个纹理波
v2BumpUV0.xy=IN.v2Tex.xy*v2TexScale*0.5 + cycle*v2BumpSpeed*1.9;
v2BumpUV1.xy=IN.v2Tex.xy*v2TexScale*1.1 + cycle*v2BumpSpeed*3.1;
v2BumpUV2.xy=IN.v2Tex.xy*v2TexScale*2.1 + cycle*v2BumpSpeed*9.5;
3个纹理波使用不同移动的方向,不同的速度,不同的UV值,叠加生成。

第一次写程序的原理解释,估计文采不好造成理解难度加大,如果有疑问也可以QQ我 61092517

26

主题

417

帖子

476

积分

中级会员

总版主

Rank: 3Rank: 3

积分
476
发表于 2011-12-5 11:05:00 | 显示全部楼层

Re:d3dx9做的波浪水面效果

效果不错,赞一个

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2015-6-24 15:57:33 | 显示全部楼层
代码在哪儿呢?求发个到我邮箱449567236@qq.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 17:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表