-1

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

我一直在阅读很多教程,其中很好地解释了不同的算法,但我只是不知道如何输入。我的意思是,我在哪里“将图像作为参数传递”以获得它的位图或像素缓冲区,以便我可以操作它?

提前致谢。

4

2 回答 2

1

Android SDK 中有一个很好的示例应用程序,名为“HelloEffects”,可以执行此操作。图像通过函数 glTexImage2D() 或 GLUtils.texImage2D() 作为“纹理”加载。

我认为这篇文章会有所帮助:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

于 2013-06-11T20:51:06.903 回答
1

基本上,这都是关于绑定你的纹理并将其 ID 作为指向所谓的GLSL 纹理采样器的统一传递(Sampler_(GLSL) wiki 链接)。然后,神奇的 glsl 命令是texture2D().

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
glUniform1i(glGetUniformLocation(program,"texsampler"),0);

whereglActiveTexture(GL_TEXTUREi);激活指定的i槽并将glBindTexture(GL_TEXTURE_2D, textureID);textureID 绑定到该槽。0 inglUniform1i()实际上等于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);

}
于 2013-06-11T23:21:49.987 回答