图象扭曲算法_第1页
图象扭曲算法_第2页
图象扭曲算法_第3页
图象扭曲算法_第4页
图象扭曲算法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图象扭曲算法(图像形变算法)需要学习这一算法,在很多网站上找到的都是同一个文章,但是却没有相应图片,google到有图片的此文,于是转载下,并为作者打抱不平下,强烈要求转载文章尽量指明原出处!selected from: by: 刘小军图象扭曲是平面图形变化的一种,它可用于许多场合,如在以前介绍的火焰特效中加入扭曲效果,会使火焰更逼真(当然代码要有更高的的效率才行),如果在字幕当中加入扭曲效果,会给人一种怪异的感觉。图象扭曲的算法并不复杂,但要解释清楚却不是一件容易的事,为了说明问题只好借用图片了,网路慢的朋友多多包涵了。算法例程源码编译需vc+、dxsdk、dxguide(源码已无法下载)。

2、imagechange1.gif图一imagechange2.gif图二首先我们来看图一,大家可看出在图中有一些网格线,这里假定这些网格线是一些有弹性的细绳,在图一中假定网格线是与底层分离的,接下来我们要在网格线的结点处施加外力,网格线受外力后就会变成象图二的形状,大家要仔细看图一和图二的底图,变化的仅仅是网格线,而底图目前为止还没改变。imagechange3.gif图三再下来就是关键的地方了,到目前为止,我们还是假定网格线是与底图分离开的,接下来我们要把图二中网格线附着在底图上(感觉应该说是底图附到网格线上),然后撤消外力,记住网格线是有弹性的,这时底图在网格线的带动下发生变形,直到网格线

3、回复到原样,如图三。大家再仔细看看图三的底图,是不是已被扭曲?是不是恍然大悟?接下来就好解释了,我们再来看看图二到图三中某个固定的网格是如何形变的:(jink2005:下面代码16可能是对应图四一行16点,同时,个人觉得代码赋值可能反了即,应该是原图x,y位置的值,赋值给x + offset, y + offset,现在看似乎反着来的) code:/ 单元块扭曲算法inline void cfeedbackapp:textureblock(int xo, int yo)/ 投影平面float fleftoffx, fleftoffy;  / 各行左端点相对于上一行左端点的偏

4、移float frightoffy, frightoffx; / 各行右端点相对于上一行右端点的偏移float tx1, ty1, tx2, ty2;  / 当前行左、右端点的坐标float hdx, hdy;     / 当前行各点间的平均偏移量float tx, ty;     / 当前投影点坐标/ 渲染平面int x, y;      / 当前渲染点坐标int xi = (xo<<4), yi = (yo<<4); 

5、 / 当前渲染块左上角坐标word *tptr;tptr = &(m_awbuf1xi + m_nmul640yi); / jink2005:应该是计算当前点在内存中的位置fleftoffx = (m_offsetxoyo+1.xint - m_offsetxoyo.xint) / 16; / 计算平均偏移fleftoffy = (m_offsetxoyo+1.yint - m_offsetxoyo.yint) / 16; / jink2005:16为点数,对应图四frightoffx = (m_offsetxo+1yo+1.xint - m_offsetxo+1yo.xin

6、t) / 16;frightoffy = (m_offsetxo+1yo+1.yint - m_offsetxo+1yo.yint) / 16; / 计算平均偏移tx1  = m_offsetxoyo.xint;  / 取投影图块第一行左端点坐标ty1  = m_offsetxoyo.yint;tx2  = m_offsetxo+1yo.xint;  / 取投影图块第一行右端点坐标ty2  = m_offsetxo+1yo.yint;for (y=yi; y < (yi

7、+16); y+)  hdx  = (tx2-tx1) / 16;   / 计算投影图块当前行各点的平均偏移  hdy  = (ty2-ty1) / 16;  tx = tx1;      / 投影平面当前行左端点坐标  ty = ty1;  for (x = xi; x < (xi+16); x+)     *tptr+ = m_awbuf2int(

8、tx) + m_nmul640int(ty) ; / jink2005:m_awbuf2应该是对应原图像素值内存   tx += hdx;     / 下一点   ty += hdy;    tptr += (scrwidth-16);   / 下一行  tx1 += fleftoffx;    / 计算投影平面中下一行左、右端点的坐标  ty1 += fleftoffy;  tx2 += frightoffx;  ty2 += frightoffy; imagechange4.gif图四图二中的网格是不规则形状的四边形,图三中的则是正方形。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论