【问题标题】:OpenGL ES swap pixelsOpenGL ES 交换像素
【发布时间】:2016-05-23 15:29:19
【问题描述】:

我尝试开发一个 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;
}

你知道如何像我的图表那样交换像素(让我的第一个顶点着色器工作)吗? 谢谢

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    避免 if 着色器中的声明 performance 可能会恶化。

    简单的解决方案可能是在片段着色器中交换纹理坐标。我想您的 v 纹理坐标沿着渲染相机图像的四边形的整个高度从 0 变为 1。然后片段着色器中的以下代码应该可以解决问题。

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

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

    【讨论】:

    • 我同意这一点。您需要交换纹理坐标,而不是顶点位置。屏幕上出现垃圾的原因是因为您将一些顶点移出屏幕。
    • 谢谢!但是在片段着色器中呢?因为我认为我必须避免在片段着色器中运行处理,因为在交换之后我必须放大图像的一部分......你认为有可能在顶点着色器中完成所有操作吗?
    • 在片段或顶点着色器中可以进行交换和缩放。使用输入统一定义缩放(min_u、max_u、min_v、max_v)。然后在顶点着色器中指定左下顶点纹理坐标(min_u, max_v),左上(min_u, min_v),右上(max_u, min_v),右下(max_u, max_v)。纹理坐标需要变化。这样,您将完成两者。缩放和交换顶点着色器。
    • 感谢您的所有回答,它有效!但是对我来说最大值不是 1.0 而是 0.5 是否正常? (它在 0.5 中完美运行,但在 1.0 中非常奇怪)。但是我有最后一个问题(对不起),想象一下我想扩大一半的图片。怎么能 ?因为如果我用我的着色器来做,宽半部分的一部分会不在屏幕上?或者也许,我可以这样做,然后我可以缩小表面以查看所有宽的部分?谢谢
    • 我真的不明白你的意思。我想您正在使用屏幕对齐的四边形(4 个顶点)渲染图像。然后缩放它的想法是,而不是映射整个图像空间(u 和 v 坐标中的 0-1),您将仅选择要在四边形中渲染的图像的一部分(我们的最大/最小 u 和 v 坐标) .因此,您的边界值与 1 和 0 不同是完全可以的。只要它们保持在 0-1 间隔。试着把它画在纸上。它会变得更加清晰。
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2021-05-11
    • 2012-02-04
    相关资源
    最近更新 更多