android openGL网格神器

时间:2014-03-10 22:12:25

标签: android opengl-es opengl-es-2.0

我有一个Android应用程序,我使用openGL来制作一些整洁的图像效果。

基本设置是我不断地将缓冲区绘制到两个纹理中的一个,然后在该纹理的顶部绘制下一帧(本质上是模拟),以产生相同图像不断被操纵的效果。

我正在尝试为此添加一个淡入淡出效果,其中我使背景变暗,然后在其上绘制,但我从中获得了一个非常奇怪的神器。这是我的片段着色器:

 private final String mCompositeFragmentShader =
        "#extension GL_OES_EGL_image_external : require\n" +
                "precision mediump float;\n" +
                "varying vec2 bTextureCoord;\n" +
                "varying vec2 vTextureCoord;\n" +
                "uniform samplerExternalOES sTexture;\n" +
                "uniform sampler2D bufferTexture;\n" +
                "uniform float gamma; \n" +
                "void main() {\n" +
                "  vec4 camera = texture2D(sTexture, vTextureCoord);\n" +
                "  camera.r = pow(camera.r, 1.0/gamma);\n" +
                "  camera.g = pow(camera.g, 1.0/gamma);\n" +
                "  camera.b = pow(camera.b, 1.0/gamma);\n" +
                "  vec4 bg = texture2D(bufferTexture, bTextureCoord);\n" +
                "  vec3 color = max(camera.rgb, bg.rgb -vec3(.02, .02, .02));\n"+
                "  gl_FragColor = vec4(color,1.0);\n" +
                "}\n";

代码的相关位是:

    vec3 color = max(camera.rgb, bg.rgb -vec3(.02, .02, .02));

所以我希望随着时间的推移,亮区最终会逐渐消失。然而,它不是黑色而是逐渐消失到洋红色网格: artifact image

您可以看到屏幕上绘制的每个三角形的网格不同(我只绘制了两个三角形)。

这是顶点着色器,以防万一:

    "uniform mat4 uMVPMatrix;\n" +
    "uniform mat4 uSTMatrix;\n" +
    "attribute vec4 aPosition;\n" +
    "attribute vec4 aTextureCoord;\n" +
    "varying vec4 tempCoords;" +
    "varying vec2 vTextureCoord;\n" +
    "varying vec2 bTextureCoord;\n" +
    "void main() {\n" +
    "  gl_Position = aPosition;\n" +
    "  bTextureCoord = aTextureCoord.xy;\n" +
    "  tempCoords = aTextureCoord;\n" +
    "  tempCoords.y = aTextureCoord.y * ("+previewSize.height+".0 /"+previewSize.width+".0);\n" +
    "  vTextureCoord = (uSTMatrix * tempCoords).xy;\n" +
    "}\n";

任何人都知道造成这种情况的原因,以及如何解决这个问题?

0 个答案:

没有答案