图像扭曲算法
前几天在解决公司一个项目时候,遇到个扭曲算法问题,图像扭曲在DX或者OPENGL中非常容易实现,只需要修改uv坐标或者修改顶点坐标就行了,至于怎么扭曲全部交给DX,OPENGL了.这次得自己写内部算法的细节.
2d/3d中一般都是使用矩阵来控制图形变换,不过之前的变换都是标准的变换,也就是不管怎么缩放旋转极坐标系始终是垂直的,可是扭曲就不一样了,极坐标系还有不垂直的情况.先直接套用仿射矩阵,结果输出的图是错的,难道仿射矩阵不适用于扭曲? 后来查了资料,发现原来还是我矩阵极坐标系弄错了 以前使用引擎时候,输出效果不对,直接转置一下,在输出看看效果,这次居然给忘记了.
如图,三角形从左往右变换
可以设
B为坐标系原点, BC为x轴, BA为y轴
根据公式
(AxisX.x AxisX.y 0)
(u v 1) x (AxisY.x AxisY.y 0) = (x y 1)
(0 0 1)
AxisX就是向量BC,AxisY就是向量BA
由于uv是一个权重值,在变换过程中是不会发生变化的
所以只需要先算出三角形1的uv值, 再把uv带入三角形2种,就能得到x' y' . 扭曲的核心算法也就完成了.
直接上最终效果图
原图:
扭曲后:
天气
分类
标签
存档
- 2024年3月(1)
- 2024年2月(1)
- 2023年8月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年1月(2)
- 2021年10月(1)
- 2021年7月(1)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(2)
- 2020年5月(1)
- 2019年10月(1)
- 2019年9月(2)
- 2019年7月(1)
- 2019年1月(4)
- 2018年12月(1)
- 2018年11月(1)
- 2018年10月(5)
- 2018年8月(2)
- 2018年7月(5)
- 2018年6月(2)
- 2018年4月(1)
- 2018年2月(1)
- 2017年12月(2)
- 2017年11月(1)
- 2017年10月(4)
- 2017年9月(3)
- 2017年8月(2)
- 2017年5月(2)
- 2017年4月(7)
- 2017年2月(1)
- 2016年12月(1)
- 2016年11月(2)
- 2016年10月(3)
- 2016年6月(2)
- 2016年3月(1)
- 2016年1月(2)
- 2015年12月(3)
- 2015年11月(3)
- 2015年10月(1)
- 2015年9月(1)
- 2015年8月(2)
- 2015年7月(2)
- 2015年5月(1)
- 2015年4月(1)
- 2015年2月(1)
- 2015年1月(1)
- 2014年12月(4)
- 2014年11月(1)
- 2014年10月(1)
- 2014年8月(4)
- 2014年7月(2)
- 2014年6月(1)
- 2014年2月(2)
- 2014年1月(2)
- 2013年12月(26)
- 2013年10月(2)