2012-04-07 5 views
0

I das folgende Fragment-Shader-haben:OpenGL ES drehen Textur

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

} 

jetzt, je nachdem, ob recording 0 oder 1 ist, möchte ich uniform sampler2D videosprite 180 Grad drehen (Reflexion in X-Achse, vertikal kippen). Wie kann ich das machen?

Ich habe die Funktion glRotatef() gefunden, aber wie gebe ich an, dass ich die videosprite und nicht die videoframe drehen möchte?

Antwort

2

Err, kann nicht ändern Sie einfach die Art und Weise videosprite im Fragment-Shader zugegriffen wird?

vec2 c2; 
if(recording == 0) { 
    c2 = coordinate; 
} else { 
    c2 = vec2(coordinate.x, 1.0 - coordinate.y); 
}