Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用GLSL片段着色器的简单图像过滤器_Android_Image Processing_Opengl Es 2.0_Glsl - Fatal编程技术网

Android 使用GLSL片段着色器的简单图像过滤器

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

我从OpenGL ES 2开始,并尝试构建一个非常简单的应用程序,其中我有一个静态图像和一个按钮,该按钮使用GLSL片段着色器将Instagram一样的照片过滤器应用于该图像

我已经阅读了很多教程,其中对不同的算法进行了很好的解释,但我不知道如何进行输入。我的意思是,我在哪里“将图像作为参数传递”,以便获取其位图或像素缓冲区,以便对其进行操作


提前感谢。

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);

}