- UID
- 63
- 积分
- 163
- 帖子
- 9
- 主题
- 3
- 论坛币
- 1533
- 威望
- 0
- EP值
- 272
- MP值
- 0
- 阅读权限
- 50
- 注册时间
- 2011-8-18
- 在线时间
- 16 小时
- 最后登录
- 2014-12-11
|
想了一下 这个东西该放哪个板块
还是放这好了 貌似跟使用tcax没什么关系 虽然跟ass也无关的样子
水波的话做法好像也很多 我说的主要是像素形式的水波
http://wenku.baidu.com/view/b4629463783e0912a2162a57.html
网上很容易搜到这样的东西
里面有很多近似什么的 这个之 外还有很多的理论支持 有兴趣可以仔细研究 简单点直接关注他的计算公式也行
核心公式就是2个
一个水波扩散的能量传递
buf2[i][j]=buf1[i+1][j]+buf1[i-1][j]+buf1[i][j+1]+buf1[i][j-1]-buf2[i][j]
buf2[i][j]=buf2[i][j]-buf2[i][j]/32 此处为能量损失
一个位移计算公式
xoff=buf1[i][j-1]-buf[i][j+1]
yoff=buf1[i-1][j]-buf[i+1][j]
其中buf1和buf2为和图片size等大的浮点数组(跟网页中有一点区别)用来存储对应位置像素的振幅
具体过程如下:
1.初始化buf1和buf2为和图片size等大的全0二维数组
2.添加波动源
如:buf1[100][100]=32
3.逐帧计算:
前后2帧能量传递
for(i=1;i<height-2;i++)
for (j=1;j<width-2;j++) 不考虑边界的一圈 所以为1到heiht-2和1到width-2
buf2[i][j]=buf1[i+1][j]+buf1[i-1][j]+buf1[i][j+1]+buf1[i][j-1]-buf2[i][j]
buf2[i][j]=buf2[i][j]-buf2[i][j]/32 此处为能量损失
交换2帧buf中的数据 保持从buf1计算buf2 即buf1为buf2的前一帧
for(i=0;i<height-1;i++)
for (j=0;j<width-1;j++)
temp=buf1[i][j]
buf1[i][j]=buf2[i][j]
buf2[i][j]=temp
计算位置偏移以及像素
for(i=0;i<height-1;i++)
for (j=0;j<width-1;j++)
xoff=buf1[i][j-1]-buf[i][j+1]
yoff=buf1[i-1][j]-buf[i+1][j]
偏移前像素点坐标:i,j
偏移后该点显示(i+yoff,j+xoff)的像素值
color=get(img,i+yoff,j+xoff) 获取(i+yoff,j+xoff)点颜色
set(img_temp,i,j,color) 设置i,j点的颜色
最终得到img_temp的单帧图像
循环步骤3得到你所需要的时间长度的帧
大致过程就如此了
可能存在错误什么的 欢迎大家指出 要是不嫌弃的话 也可以与我讨论什么的
http://pan.baidu.com/s/1d0q8Z
|
-
1
查看全部评分
-
|