Domanda

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

Come funziona il campione [i] = Texture2D (sample0, ...) lavoro di linea?

Sembra che per sfocare un'immagine, devo generare prima l'immagine, eppure qui, sto in qualche modo cercando di interrogare il molto iamge sto generando. Come funziona?

È stato utile?

Soluzione

Come si nota, al fine di rendere un'immagine sfocata, è necessario prima creare un'immagine, e poi sfocatura esso. Questo shader fa (solo) il secondo passo, riprendere un'immagine che è stato generato in precedenza e la sfocatura esso. C'è bisogno di un codice aggiuntivo altrove per generare l'immagine sfocata non originale.

Altri suggerimenti

Si applica un kernel sfocatura all'immagine. tc_offset deve essere inizializzato correttamente dall'applicazione per formare un'area 3x3 di punti di campionamento intorno coordinata reale consistenza:

0   0   0
0   x   0
0   0   0

(supponendo x è la coordinata originale). L'offset per il punto di campionamento in alto a sinistra sarebbe -1/width,-1/height. L'offset per il punto centrale deve essere accuratamente allineato al centro texel (il problema off-by-0.5). Inoltre, il filtro bilineare hardware può essere utilizzato per aumentare economicamente la quantità di sfocatura (campionando tra texel).

Il resto shader scale i campioni in base alla distanza. Di solito, questo è precalcolate così:

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

Un modo è quello di generare l'immagine originale per rendere a una texture, non sullo schermo. E poi si disegna un quad a schermo intero utilizzando questo shader e la consistenza come è input per post-elaborazione dell'immagine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top