2

iOSプラットフォーム用に開発しているxcodeでGPUimageを使用しています。

たとえば、ライブ ビデオ ストリームを取得して、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;
}

助言がありますか?

サンプル画像

4

2 に答える 2

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

また、ビデオ入力は 2 のべき乗でないテクスチャを生成します。

したがって、使用されるスクリプトは次のとおりです。

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

範囲は、行と列の数を表します。

于 2013-10-30T15:56:19.507 に答える
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 );
于 2013-10-30T01:04:13.487 に答える