2012-04-07 229 views
0

我有以下片段着色器:OpenGL ES的旋轉紋理

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,I想要旋轉uniform sampler2D videosprite 180度(在x軸反射,垂直翻轉)。我怎樣才能做到這一點?

我找到函數glRotatef(),但是如何指定我想旋轉videosprite而不是videoframe

回答

2

錯誤,難道你不能只修改片段着色器中的videosprite的訪問方式嗎?

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