2013-10-29 91 views
2

我正在使用GPUimage與xcode開發的iOS平臺。如何創建GPUImage網格效果

嘗試拍攝實時視頻流並將其轉換爲9塊,例如3x3網格。

我已將視頻縮放到0.33原始大小,然後嘗試應用片段着色器將縮放視頻重複到其他切片。

但是着色器僅適用於縮放的視頻而非整個視圖。

這裏是我的着色器:

varying highp vec2 textureCoordinate; 
uniform sampler2D inputImageTexture; 

uniform mediump float range; 

void main() 
{ 
    mediump vec2 p = textureCoordinate; 


    if (p.x > 0.66) { 
     p.x = (p.x-0.66); 
    } 
    else if (p.x > 0.33) { 
     p.x = (p.x-0.33); 
    } 

    if (p.y > 0.66) { 
     p.y = (p.y-0.66); 
    } 
    else if (p.y > 0.33) { 
     p.y = (p.y-0.33); 
    } 

    lowp vec4 outputColor = texture2D (inputImageTexture, p); 
    gl_FragColor = outputColor; 
} 

有什麼建議?

sample image

回答

0

是,設置你的紋理包裝模式GL_REPEAT,所以你不需要關心「克隆」!

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

而且着色器應該是:

varying highp vec2 textureCoordinate; 
uniform sampler2D inputImageTexture; 

uniform mediump float range; 

void main() 
{ 
    mediump vec2 p = 3.0 * textureCoordinate - vec2(1.0); 
    lowp vec4 outputColor = texture2D (inputImageTexture, p); 
    gl_FragColor = outputColor; 
} 

如果由於某種原因,你不想使用GL_REPEAT,只是自己使用MOD()函數重複紋理:

mediump vec2 p = mod(3.0 * textureCoordinate - vec2(1.0), 1.0); 
+0

感謝瓦格納完美的工作....但我想了解它是如何做到這一點....你能解釋多一點這行代碼呢... ... mediump vec2 p = mod(3.0 * textureCoordinate - vec2(1.0),1.0); – Jatin

+0

@Wagner Patriota,如何在GPUImage上使用這個着色器? – Allan

2
// This is necessary for non-power-of-two textures 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

和一個視頻輸入產生非冪的兩個紋理。

這樣使用的憑證是:

varying highp vec2 textureCoordinate; 
    uniform sampler2D inputImageTexture; 

    // num tiles row x col 
    uniform mediump float range; 


    void main() 
    { 
     mediump vec2 p = mod(range * textureCoordinate - vec2(1.0), 1.0); 

     lowp vec4 outputColor = texture2D (inputImageTexture, p); 
     gl_FragColor = outputColor; 
    } 

範圍表示行列數的數目。

+0

如何在一個框架上添加此着色器? – Allan