GLSL: gl_FragCoord questions
Je suis expérimenter avec GLSL pour OpenGL ES 2.0. J'ai un quad et une texture que je suis rendu. Je peux réussir à faire de cette façon:
//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 far So good. Cependant, j'aimerais faire quelques pixels en fonction de filtrage, par exemple, la Médiane. Donc, je voudrais travailler dans les coordonnées des pixels plutôt que dans normalisé (tc0
) et ensuite de les convertir à nouveau le résultat normalisé coords. Donc, je voudrais utiliser gl_FragCoord
au lieu d'une uv d'attribut (tc0
). Mais je ne sais pas comment revenir à normalisées coords parce que je ne connais pas la gamme de gl_FragCoords. Une idée de comment je pourrais l'obtenir? J'ai de loin, à l'aide d'une valeur fixe pour la "normalisation", bien qu'il ne fonctionne pas parfaitement comme il est à l'origine de l'étirement et de carrelage (mais au moins c'est de montrer quelque chose):
//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));
}
Donc, le simple fait de la question est, que dois-je utiliser à la place de vec2(256, 256)
afin que je puisse obtenir le même résultat que si j'ai été en utilisant les coordonnées uv.
Merci!
OriginalL'auteur Albus Dumbledore | 2011-02-28
Vous devez vous connecter pour publier un commentaire.
gl_FragCoord est en coordonnées d'écran, de sorte à obtenir normalisé coords vous avez besoin de diviser par la fenêtre d'affichage de la largeur et de la hauteur. Vous pouvez utiliser un uniforme de la variable à transmettre cette information à l'shader, puisqu'il n'est pas intégré dans la variable.
Non,comme je l'ai dit, le seul moyen est de le transmettre manuellement par l'intermédiaire d'un uniforme de la variable.
Merci. Si elle n'est pas trop gênant, pourriez-vous juste me donner une idée de la façon de passer la variable en dehors de mon shader. Vous voyez, je suis très nouveau à OpenGL. 🙂
lire lighthouse3d.com/opengl/glsl/index.php?ogluniform
Parfait. Ne peux pas vous remercier assez!
OriginalL'auteur Matias Valdenegro
Vous pourrez également déguster de la texture de l'onu-les coordonnées normalisées si:
Dumbledore. Désolé, il ne s'applique pas aux GL ES. Ma réponse est inutile pour vous.
Pas de soucis. C'est toujours mieux d'en savoir plus même si ce n'est pas exactement ce qu'on cherchait. Merci 🙂
OriginalL'auteur kvark