如何解决尝试为摄像机制作美颜滤镜 By MasayukiSuda
我正在尝试为 MasayukiSuda 制作 this library 的美容过滤器
所以到目前为止,我已经尝试混合 2 个过滤器,它给我带来了某种效果,但这不是我想要实现的。
我想通过扩展 MasayukiSuda 编写的 GlFilter 类来制作一个美容过滤器
所以我喜欢这个
package com.daasuu.camerarecorder.egl.filter;
import static android.opengl.GLES20.gluniform1f;
public class GlBeautyFilter extends GlFilter {
private static final String FRAGMENT_SHADER =
"precision mediump float;\n" +
"\n" +
"varying mediump vec2 textureCoordinate;\n" +
"\n" +
"uniform sampler2D inputimageTexture;\n" +
"uniform vec2 singleStepOffset;\n" +
"uniform mediump float params;\n" +
"\n" +
"const highp vec3 W = vec3(0.299,0.587,0.114);\n" +
"vec2 blurCoordinates[20];\n" +
"\n" +
"float hardLight(float color)\n" +
"{\n" +
"\tif(color <= 0.5)\n" +
"\t\tcolor = color * color * 2.0;\n" +
"\telse\n" +
"\t\tcolor = 1.0 - ((1.0 - color)*(1.0 - color) * 2.0);\n" +
"\treturn color;\n" +
"}\n" +
"\n" +
"void main(){\n" +
"\n" +
" vec3 centralColor = texture2D(inputimageTexture,textureCoordinate).rgb;\n" +
" blurCoordinates[0] = textureCoordinate.xy + singleStepOffset * vec2(0.0,-10.0);\n" +
" blurCoordinates[1] = textureCoordinate.xy + singleStepOffset * vec2(0.0,10.0);\n" +
" blurCoordinates[2] = textureCoordinate.xy + singleStepOffset * vec2(-10.0,0.0);\n" +
" blurCoordinates[3] = textureCoordinate.xy + singleStepOffset * vec2(10.0,0.0);\n" +
" blurCoordinates[4] = textureCoordinate.xy + singleStepOffset * vec2(5.0,-8.0);\n" +
" blurCoordinates[5] = textureCoordinate.xy + singleStepOffset * vec2(5.0,8.0);\n" +
" blurCoordinates[6] = textureCoordinate.xy + singleStepOffset * vec2(-5.0,8.0);\n" +
" blurCoordinates[7] = textureCoordinate.xy + singleStepOffset * vec2(-5.0,-8.0);\n" +
" blurCoordinates[8] = textureCoordinate.xy + singleStepOffset * vec2(8.0,-5.0);\n" +
" blurCoordinates[9] = textureCoordinate.xy + singleStepOffset * vec2(8.0,5.0);\n" +
" blurCoordinates[10] = textureCoordinate.xy + singleStepOffset * vec2(-8.0,5.0);\n" +
" blurCoordinates[11] = textureCoordinate.xy + singleStepOffset * vec2(-8.0,-5.0);\n" +
" blurCoordinates[12] = textureCoordinate.xy + singleStepOffset * vec2(0.0,-6.0);\n" +
" blurCoordinates[13] = textureCoordinate.xy + singleStepOffset * vec2(0.0,6.0);\n" +
" blurCoordinates[14] = textureCoordinate.xy + singleStepOffset * vec2(6.0,0.0);\n" +
" blurCoordinates[15] = textureCoordinate.xy + singleStepOffset * vec2(-6.0,0.0);\n" +
" blurCoordinates[16] = textureCoordinate.xy + singleStepOffset * vec2(-4.0,-4.0);\n" +
" blurCoordinates[17] = textureCoordinate.xy + singleStepOffset * vec2(-4.0,4.0);\n" +
" blurCoordinates[18] = textureCoordinate.xy + singleStepOffset * vec2(4.0,-4.0);\n" +
" blurCoordinates[19] = textureCoordinate.xy + singleStepOffset * vec2(4.0,4.0);\n" +
"\n" +
" float sampleColor = centralColor.g * 20.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[0]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[1]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[2]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[3]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[4]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[5]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[6]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[7]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[8]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[9]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[10]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[11]).g;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[12]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[13]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[14]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[15]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[16]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[17]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[18]).g * 2.0;\n" +
" sampleColor += texture2D(inputimageTexture,blurCoordinates[19]).g * 2.0;\n" +
"\n" +
" sampleColor = sampleColor / 48.0;\n" +
"\n" +
" float highPass = centralColor.g - sampleColor + 0.5;\n" +
"\n" +
" for(int i = 0; i < 5;i++)\n" +
" {\n" +
" highPass = hardLight(highPass);\n" +
" }\n" +
" float luminance = dot(centralColor,W);\n" +
"\n" +
" float alpha = pow(luminance,params);\n" +
"\n" +
" vec3 smoothColor = centralColor + (centralColor-vec3(highPass))*alpha*0.1;\n" +
"\n" +
" gl_FragColor = vec4(mix(smoothColor.rgb,max(smoothColor,centralColor),alpha),1.0);\n" +
"}";
public GlBeautyFilter() {
super(DEFAULT_VERTEX_SHADER,FRAGMENT_SHADER);
}
}
所以我制作了片段着色器,并且我使用的是默认的顶点着色器,但是每当我应用过滤器应用程序时都会崩溃
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。