Pregunta

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

¿Cómo funciona la muestra [i] = Texture2D (sample0, ...) la línea de trabajo?

Parece que para difuminar una imagen, tengo que generar primero la imagen, sin embargo, aquí, estoy de alguna manera intentar consultar el iamge estoy generando. ¿Cómo funciona esto?

¿Fue útil?

Solución

Como nota, con el fin de hacer una imagen borrosa, primero tiene que hacer una imagen, y luego difuminar ella. Esto hace shader (justo) el segundo paso, tomando una imagen que se ha generado con anterioridad y borrando la misma. Es necesario que haya un código adicional en otro lugar para generar la imagen borrosa no originales.

Otros consejos

Se aplica un núcleo desenfoque de la imagen. tc_offset necesita ser inicializado correctamente por la aplicación para formar un área de 3x3 de puntos de muestreo alrededor de la coordenada de textura real:

0   0   0
0   x   0
0   0   0

(suponiendo que x es la coordenada original). El desplazamiento del punto de muestreo superior izquierda serían -1/width,-1/height. El desplazamiento para el punto central necesita ser cuidadosamente alineados a centro de Texel (el problema off-by-0.5). Además, el filtro bilineal hardware se puede utilizar para aumentar barata la cantidad de desenfoque (mediante el muestreo de entre texels).

El resto de la shader escala las muestras por su distancia. Por lo general, esto se precalculados así:

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

Una forma es generar la imagen original para hacer a una textura, no a la pantalla. Y luego se dibuja un patio de la pantalla completa utilizando este shader y la textura, ya que es la entrada a la post-proceso de la imagen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top