TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 2412|回复: 4

关于水波的测试 [复制链接]

Rank: 4

发表于 2013-10-7 13:57:25 |显示全部楼层
想了一下 这个东西该放哪个板块
还是放这好了 貌似跟使用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

查看全部评分

Rank: 4

发表于 2013-10-7 13:58:10 |显示全部楼层

Rank: 4

发表于 2013-10-7 14:01:23 |显示全部楼层
支持

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2013-10-7 14:02:18 |显示全部楼层
好材料, 顶一个

Rank: 4

发表于 2014-1-14 16:30:40 |显示全部楼层
额   
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-16 19:43

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH