GLSL: gl_FragCoord Fragen
Ich bin das Experimentieren mit GLSL für OpenGL ES 2.0. Ich habe einen quad und eine textur, die ich bin-rendering. Ich kann erfolgreich zu tun es auf diese Weise:
//VERTEX SHADER
attribute highp vec4 vertex;
attribute mediump vec2 coord0;
uniform mediump mat4 worldViewProjection;
varying mediump vec2 tc0;
void main()
{
//Transforming The Vertex
gl_Position = worldViewProjection * vertex;
//Passing The Texture Coordinate Of Texture Unit 0 To The Fragment Shader
tc0 = vec2(coord0);
}
//FRAGMENT SHADER
varying mediump vec2 tc0;
uniform sampler2D my_color_texture;
void main()
{
gl_FragColor = texture2D(my_color_texture, tc0);
}
So weit So gut. Allerdings würde ich gerne ein paar pixel-basierte Filterung, z.B. Median. Also, ich möchte arbeiten in pixel-Koordinaten, anstatt in normalisierter (tc0
) und dann konvertieren Sie das Ergebnis wieder normalisiert coords. Daher würde ich gerne gl_FragCoord
anstelle eines uv-Attribut (tc0
). Aber ich weiß nicht, wie man wieder zu normalisierten Koordinaten, denn ich weiß nicht, die Palette der gl_FragCoords. Irgendeine Idee, wie ich diesen bekommen könnte? Ich habe, so weit mit einem festen Wert für die "Normalisierung", allerdings funktioniert es nicht perfekt, wie es ist, verursacht Dehnung und Fliesen (aber mindestens ist, etwas zu zeigen):
//FRAGMENT SHADER
varying mediump vec2 tc0;
uniform sampler2D my_color_texture;
void main()
{
gl_FragColor = texture2D(my_color_texture, vec2(gl_FragCoord) / vec2(256, 256));
}
Also, die einfache Frage, was sollte ich an der Stelle von vec2(256, 256)
so, ich könnte das gleiche Ergebnis erhalten, als wenn ich über den uv-coords.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
gl_FragCoord ist in Bildschirm-Koordinaten, damit man die normalisierten Koordinaten, die Sie brauchen zu teilen, indem Sie die viewport-Breite und-Höhe. Sie können eine uniform-variable zu übergeben, die Informationen an den shader, da gibt es keinen eingebauten Variablen für es.
Können Sie auch Muster der textur von un-normalisierten Koordinaten, wenn: