OpenGL实现图片边缘暗角效果(1)
来源:互联网 发布:三菱m70cnc传输软件 编辑:程序博客网 时间:2024/05/18 02:13
在进行VR视频播放开发的时候,看到如下一段opengl代码,一开始不知道为什么这样做,会产生什么效果。
首先是创建了一个纹理,该纹理除了边缘为半透明(58/255=0.23)外其它像素都是1:
void createVigTex() { static const int scale = 6; static const int width = 16 * scale; static const int height = 9 * scale; unsigned char buffer[width * height]; memset(buffer, 255, sizeof(buffer)); for ( int i = 0; i < width; i++ ){ buffer[i] = 58; buffer[width*height - 1 - i] = 58; } for ( int i = 0; i < height; i++ ){ buffer[i * width] = 58; buffer[i * width + width - 1] = 58; } CreateTexture2D(mTexVig, GL_LUMINANCE, GL_LUMINANCE, width, height, buffer); }
然后使用如下fragment shader来绘制视频:
const char* vigTexFragShader = "uniform sampler2D sampler0;\n" // video "uniform sampler2D sampler1;\n" // edge vignette "uniform vec2 resolution;\n" "varying vec2 oTexCoord;\n" "void main()\n" "{\n" " gl_FragColor = texture2D( sampler0, oTexCoord ) * texture2D( sampler1, oTexCoord );\n" "}\n";
搜索了一下vignette这个单词,大概是暗角效果的意思,百度百科上有解释:
[暗角一词属于摄影术语。对着亮度均匀景物,画面四角有变暗的现象,叫做“失光”,俗称“暗角”。]
Photoshop上也是有专门的技巧来产生这种效果的:
这不就是遮罩效果吗?在射击游戏中,经常出现的狙击镜效果,跟这个也有点类似,只是边缘是圆形的:
使用上面的shader代码同样能实现这种效果,只需要把纹理替换成一个圆形遮罩的图像就可以了。当然,用不同形状的遮罩纹理就能实现不同的遮罩效果,这种方法具有很大的灵活性。
阅读全文
0 0
- OpenGL实现图片边缘暗角效果(1)
- 图片边缘增加光晕效果
- opengl透明mask图片做蒙版效果的实现
- NGUI相关----UITexture图片边缘流光效果
- opengl实现Bloom效果
- Android----EdgeEffect类边缘效果的实现
- jquery实现图片从左到右到下到上边缘移动
- 利用OpenGL实现动画效果
- OpenGL如何实现雾化效果
- opengl实现错切效果
- OpenGL实现抗锯齿效果
- 采用Bitmap的extractAlpha产生图片边缘光晕效果
- 提取图像Alpha位图(图片边缘光晕效果)
- 采用Bitmap的extractAlpha产生图片边缘光晕效果
- 采用Bitmap的extractAlpha产生图片边缘光晕效果
- OpenGL应用——实现边缘填充算法
- 【C++ OpenGL ES 2.0编程笔记】4: 纹理贴图-图片叠加效果实现
- OpenGL: 绘制效果保存成图片
- Node Web
- 罗技G610:无驱动背光模式调整
- It is not safe to rely on the system's timezone settings. You are *required*
- centos 源码安装 apache2.4
- 测试之美
- OpenGL实现图片边缘暗角效果(1)
- Java ——guava-libraries
- 题目16:矩形嵌套
- Qt网络编程--HTTP服务器(三))
- OkHttp封装类
- 把科学计数法转成字符串
- Java 面向对象 多态
- linux kernel makefile 中 $(Q)的意思
- Linux 0.12 startup汇编代码的编译