我正在将GPUimage与用于iOS平台的xcode开发一起使用。
尝试获取实时视频流并将其转换为3x3网格的9个图块。
我已将视频缩放到原始大小的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;
}
有什么建议?

最佳答案

是的,将纹理环绕模式设置为 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 );

关于ios - 如何创建GPUImage网格效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19671200/

10-13 04:27