簡體   English   中英

OpenGL ES交換像素

[英]OpenGL ES swap pixels

我嘗試開發一個Android應用程序,該應用程序交換(相機預覽的)底部<=>頂部的像素。 交換圖

所以我寫了這個頂點着色器,但是它顯示了非常奇怪的東西(帶有數字噪波的黑屏)。

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

您知道如何像圖中一樣交換像素(使第一個頂點着色器工作)嗎? 謝謝

避免if着色器中的語句性能可能下降。

一個簡單的解決方案可能是在片段着色器中交換紋理坐標。 我想您的v紋理坐標沿着渲染相機圖像的四邊形的整個高度從0變為1。 然后在片段着色器中執行以下代碼即可解決問題。

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

但是,實際的紋理坐標交換取決於您在四邊形的頂點處定義紋理坐標的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM