OpenGL ES交换像素

时间:2016-05-23 15:29:20

标签: android opengl-es

我尝试开发一个交换像素(相机预览)底部< =>的Android应用程序最佳。 swap diagram

所以我写了这个顶点着色器,但它显示了非常奇怪的东西(带有数字噪音的黑屏)。

attribute vec4 vPosition;
attribute vec2 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
    if (vPosition.y > 0.0)
    {
        gl_Position = vPosition - vec4(0.0, 1.0, 0.0, 0.0);
    }
    else
    {
        gl_Position = vPosition + vec4(0.0, 1.0, 0.0, 0.0);
    }
    textureCoordinate = inputTextureCoordinate;
}

但下面的顶点着色器可以工作,但它只会将顶部像素移动到底部。

attribute vec4 vPosition;
attribute vec2 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
    if (vPosition.y > 0.0)
    {
        gl_Position = vPosition - vec4(0.0, 1.0, 0.0, 0.0);
    }
    else
    {
        gl_Position = vPosition;
    }
    textureCoordinate = inputTextureCoordinate;
}

你知道如何在我的图表中交换像素(使我的第一个顶点着色器工作)? 谢谢

1 个答案:

答案 0 :(得分:1)

避免使用着色器performance中的if语句可能会恶化。

简单的解决方案可能是在片段着色器中交换纹理坐标。我想你的v纹理坐标沿着渲染相机图像的四边形的整个高度从0到1。然后在片段着色器中使用以下代码就可以了。

textureCoordinate = vec2(textureCoordinate.u, 1 - textureCoordinate.v);

但是,实际纹理坐标交换取决于您在四边形顶点定义纹理坐标的方式。