OpenGL实现鱼眼扭曲

谁说我不能喝 提交于 2019-11-26 10:17:31

    这篇文章主要讲用opengl如何实现鱼眼扭曲。用opengl实现鱼眼扭曲在顶点着色器和片段着色器中都可以实现,只是如果在顶点着色器中实现,需要大量的三角形;所以从性能的角度出发,一般在片段着色器中实现鱼眼。

     在片段着色器中实现鱼眼的步骤如下:

     (1): 设定纹理坐标(0.5, 0.5)为图片的中心点

     (2): 在片段着色器中计算出当前纹理坐标和中心点纹理坐标之间的角度,步骤如下:

          1. 用当前纹理坐标减去中心点纹理坐标,得到一个新的纹理坐标P

          2. 将新的纹理坐标P的y值和x值,传入shader自带的atan函数,计算出角度

     (3): 计算出当前纹理坐标和中心点纹理坐标之间的距离: radius = sqrt(p.x * p.x  + p.y * p.y)

     (4): 对radius的值适当调整,比如:radius = pow(radius,  0.9);   

     (5): 根据现有的radius,角度,使用三角形正弦和余弦公式,计算出一个新纹理坐标P,如下:

           p.x = radius * cos(theta);

           p.y = radius * sin(theta);

     (6): 这个新的纹理坐标P还不能直接使用,需要对x值和y值分别加上0.5

     以上是鱼眼扭曲的基本步骤,在我的github中有专门的demo, 地址:fishEye,有兴趣的同学可以参考下,希望对你有所帮助。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!