0

次のフラグメントシェーダーがあります。

varying highp vec2 coordinate;
precision mediump float;

uniform vec4 maskC;
uniform float threshold;
uniform sampler2D videoframe;
uniform sampler2D videosprite;
uniform vec4 mask;
uniform vec4 maskB;


uniform int recording;

vec3 normalize(vec3 color, float meanr)
{
    return color*vec3(0.75 + meanr, 1., 1. - meanr);
}

void main() {
    float d;
    float dB;
    float dC;

    float meanr;
    float meanrB;
    float meanrC;

    float minD;

    vec4 pixelColor;
    vec4 spriteColor;

    pixelColor = texture2D(videoframe, coordinate);
    spriteColor = texture2D(videosprite, coordinate);

    meanr   = (pixelColor.r + mask.r)/8.;
    meanrB  = (pixelColor.r + maskB.r)/8.;
    meanrC  = (pixelColor.r + maskC.r)/8.;

    d   = distance(normalize(pixelColor.rgb, meanr), normalize(mask.rgb, meanr));
    dB  = distance(normalize(pixelColor.rgb, meanrB), normalize(maskB.rgb, meanrB));
    dC  = distance(normalize(pixelColor.rgb, meanrC), normalize(maskC.rgb, meanrC));

    minD = min(d, dB);
    minD = min(minD, dC);

    gl_FragColor = spriteColor;
    if (minD > threshold) {
        gl_FragColor = pixelColor;
    }

}

ここで、recordingが 0 か 1かに応じて、 uniform sampler2D videosprite180 度回転します (x 軸の反射、垂直方向の反転)。どうやってやるの?

videosprite関数 glRotatef() を見つけましたが、 ではなくを回転させるように指定するにはどうすればよいvideoframeですか?

4

1 に答える 1

2

えっと、videospriteフラグメント シェーダーでのアクセス方法を変更することはできませんか?

vec2 c2;
if(recording == 0) {
    c2 = coordinate;
} else {
    c2 = vec2(coordinate.x, 1.0 - coordinate.y);
}
于 2012-04-07T17:28:51.397 に答える