Pergunta

uniform sampler2D sampler0;
uniform vec2 tc_offset[9];
void blur()
{
  vec4 sample[9];
  for(int i = 0; i < 9; ++i)
    sample[i] = texture2D(sampler0, gl_TexCoord[0].st + tc_offset[i]);

  gl_FragColor = (sample[0] + (2.0 * sample[1]) + sample[2] +
      (2.0 * sample[3]) + sample[4] + 2.0 * sample[5] +
      sample[6] + 2.0 * sample[7] + sample[8] ) / 13.0;
}

Como funciona a amostra [i] = texture2d (sample0, ...) de linha?

Parece desfocar uma imagem, eu tenho que gerar primeiro a imagem, mas aqui estou de alguma forma tentando consultar o próprio iamge que estou gerando. Como é que isso funciona?

Foi útil?

Solução

Como você observa, para fazer uma imagem turva, primeiro você precisa fazer uma imagem e depois embaçar. Esse shader faz (apenas) o segundo passo, pegando uma imagem que foi gerada anteriormente e desfocando -a. É preciso haver um código adicional em outro lugar para gerar a imagem original não em blindagem.

Outras dicas

Ele aplica um núcleo desfoque à imagem. tc_offset precisa ser inicializado corretamente pelo aplicativo para formar uma área 3x3 de pontos de amostragem em torno da coordenada de textura real:

0   0   0
0   x   0
0   0   0

(assumindo que x é a coordenada original). O deslocamento para o ponto de amostragem superior esquerda seria -1/width,-1/height. O deslocamento para o ponto central precisa ser cuidadosamente alinhado ao Texel Center (o problema fora de 0,5). Além disso, o filtro bilinear de hardware pode ser usado para aumentar a quantidade de desfoque (por amostragem entre os Texels).

O restante do shader escala as amostras à sua distância. Geralmente, isso também é pré -computado:

for(int i = 0; i < NUM_SAMPLES; ++i) {
    result += texture2D(sampler,texcoord+offsetscaling[i].xy)*offsetscaling[i].z;
}

Uma maneira é gerar sua imagem original para renderizar uma textura, não para a tela. E então você desenha um quad de tela cheia usando este shader e a textura, pois é a entrada para pós-processo da imagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top