Frage

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

Wie funktioniert die Probe [i] = Texture2D (sample0, ...) Linie der Arbeit?

Es scheint, wie ein Bild zu verwischen, muss ich zuerst das Bild erzeugen, doch hier, ich versuche irgendwie sehr abzufragen IAMGE ich Erzeugungs bin. Wie funktionierts?

War es hilfreich?

Lösung

Wie Sie beachten, um ein unscharfes Bild zu machen, müssen Sie zuerst ein Bild machen müssen, und Unschärfe es dann. Dieser Shader bedeutet (nur) den zweiten Schritt, um ein Bild nehmen, die zuvor erzeugt wurden und Verwischung es. Es muss an anderer Stelle zusätzlichen Code, um das ursprüngliche nicht-verschwommene Bild zu erzeugen.

Andere Tipps

Es gilt eine Unschärfe-Kernel auf das Bild. tc_offset muss ordnungsgemäß durch die Anwendung initialisiert werden, um eine Fläche 3x3 zu bilden, der Probenahmestellen um die tatsächlichen Texturkoordinaten:

0   0   0
0   x   0
0   0   0

(x Annahme, daß die ursprüngliche Koordinate). Der Offset für den linken oberen Abtastpunkt würde -1/width,-1/height sein. Der Offset für den Mittelpunkt muss sorgfältig zu Texels Zentrum ausgerichtet werden (das off-by-0,5-Problem). Auch können die Hardware-bilinearen Filter verwendet werden, um billig, die Menge an Unschärfe zu erhöhen (durch Abtasten zwischen Texeln).

Der Rest des Shader skaliert die Proben nach ihrer Entfernung. Üblicherweise wird dies vorberechnet auch:

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

Eine Möglichkeit ist das Originalbild zu erzeugen, um eine Textur, nicht auf den Bildschirm zu machen. Und dann ziehen Sie eine Vollbild-Quad mit diesem Shader und die Textur, wie es der Eingang zu nachbearbeiten das Bild.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top