
OpenGL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),它由数百个不同的函数调用组成,用来呈现复杂的三维景象。下面这个实例演示了使用OpenGL在Android手机上创建自定义的暗纹滤镜。
实例功能
此实例主要通过使用GLSurfaceView控件加载自定义OpenGL渲染器Renderer,并在该Renderer中使用glShaderSource()方法,根据生成暗纹(将原始像素逐个分解为彩色圆点,然后进行灰度处理)的原生代码设置着色器的源代码,创建自定义的暗纹滤镜。当实例运行之后,单击“显示原始图像”按钮,原始图像的效果如图1(a)所示。单击“使用暗纹滤镜”按钮,图像在使用自定义的暗纹滤镜处理之后的效果如图1(b)所示。

■ 图1
实现代码
public void onClickButton1(View v) { //响应单击按钮“显示原始图像”
String myFragmentShaderString=
"varying mediump vec2 textureCoordinate;"+
"uniform sampler2D textureSampler;"+
"void main(){gl_FragColor=texture2D(textureSampler," +
"textureCoordinate);}"; //片元着色器代码
//将片元着色器代码传入渲染器
myRenderer.setFragmentShaderString(myFragmentShaderString);
myGLSurfaceView.requestRender(); //请求重新绘制图像
}
public void onClickButton2(View v) { //响应单击按钮“使用暗纹滤镜”
//在片元着色器代码中根据算法将原始像素逐个分解为
//彩色圆点,然后进行灰度处理,从而实现暗纹效果
String myFragmentShaderString = "precision highp float;" +
"varying mediump vec2 textureCoordinate;" +
"uniform sampler2D textureSampler;" +
"void main(){" +
" float myPixelSize=0.01;" +
" float myRatio=1533.0/1080.0;" +
" vec2 myXY=textureCoordinate;" +
" vec3 myGrayScaleFactor=vec3(0.2125,0.7154,0.0721);" +
" vec2 mySampleFactor=vec2(myPixelSize,myPixelSize/myRatio);" +
" vec2 mySampleXY=myXY-mod(myXY," +
" mySampleFactor)+0.5*mySampleFactor;" +
" vec2 myNewXY=vec2(myXY.x,myXY.y*myRatio+0.5-0.5*myRatio);" +
" float myNewSampleY=mySampleXY.y*myRatio+0.5-0.5* myRatio;" +
" vec2 myNewSampleXY=vec2(mySampleXY.x,myNewSampleY);" +
" float myDistance=distance(myNewSampleXY,myNewXY);" +
" vec3 mySampleColor=" +
" texture2D(textureSampler,mySampleXY).rgb;" +
" float myDotColor=1.0-dot(mySampleColor,myGrayScaleFactor);" +
" gl_FragColor.rgb=vec3(1.0-step(myDistance," +
" myPixelSize*0.5*myDotColor));" +
"}";
//将片元着色器代码传入渲染器
myRenderer.setFragmentShaderString(myFragmentShaderString);
myGLSurfaceView.requestRender(); //请求重新绘制图像
}
}
代码说明
上面这段代码在MyCode\MySampleO94\app\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中。此实例的完整代码在MyCode\MySampleO94文件夹中。
补充说明
在测试代码时,必须保持网络畅通。
源代码下载
关注微信公众号,后台回复关键词 “Android App开发超实用代码166” 即可获得完整源代码。
参考书籍


扫码优惠购书
《Android App开发超实用代码集锦——jQuery Mobile+OpenCV+O》
ISBN:9787302589358
作者:罗帅、罗斌
定价:99元
问题描述+解决方案+真实源码+效果截图
介绍jQuery Mobile、OpenCV、OpenGL等在Android平台运行的应用
300个实例,提供完整源代码,边看边做边学






文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





