Android 使用GLSL片段着色器的简单图像过滤器
我从OpenGL ES 2开始,并尝试构建一个非常简单的应用程序,其中我有一个静态图像和一个按钮,该按钮使用GLSL片段着色器将Instagram一样的照片过滤器应用于该图像 我已经阅读了很多教程,其中对不同的算法进行了很好的解释,但我不知道如何进行输入。我的意思是,我在哪里“将图像作为参数传递”,以便获取其位图或像素缓冲区,以便对其进行操作Android 使用GLSL片段着色器的简单图像过滤器,android,image-processing,opengl-es-2.0,glsl,Android,Image Processing,Opengl Es 2.0,Glsl,我从OpenGL ES 2开始,并尝试构建一个非常简单的应用程序,其中我有一个静态图像和一个按钮,该按钮使用GLSL片段着色器将Instagram一样的照片过滤器应用于该图像 我已经阅读了很多教程,其中对不同的算法进行了很好的解释,但我不知道如何进行输入。我的意思是,我在哪里“将图像作为参数传递”,以便获取其位图或像素缓冲区,以便对其进行操作 提前感谢。Android SDK中有一个名为“HelloEffects”的好示例应用程序可以实现这一点。通过函数glTexImage2D()或GLUtil
提前感谢。Android SDK中有一个名为“HelloEffects”的好示例应用程序可以实现这一点。通过函数glTexImage2D()或GLUtils.texImage2D()将图像加载为“纹理” 我认为这篇文章将有助于:
基本上,这都是关于绑定您的纹理,并将其ID作为一个统一的ID传递给一个所谓的GLSL纹理采样器()。然后,magic glsl命令是
texture2D()
其中glActiveTexture(GL_TEXTUREi)代码>激活指定的i插槽和glBindTexture(GL_TEXTURE_2D,textureID)代码>将textureID绑定到该插槽。
glUniform1i()
中的0实际上等于i。
使用后不要忘记取消绑定所有内容
顶点着色器示例:
varying vec2 texcoord;
void main() {
gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;
texcoord=gl_Vertex.xy; // or whatever you need to pass texture coordinates
}
片段着色器示例:
varying vec2 texcoord;
uniform sampler2D texsampler;
void main() {
gl_FragColor=vec4(texture2D(texsampler,texcoord).rgb,1.0);
}
varying vec2 texcoord;
uniform sampler2D texsampler;
void main() {
gl_FragColor=vec4(texture2D(texsampler,texcoord).rgb,1.0);
}