Alb*_*ore 9 shader opengl-es glsl coordinates
我正在尝试使用GLSL for OpenGL ES 2.0.我有四边形和我正在渲染的纹理.我可以成功地这样做:
//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);
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,我想做一些基于像素的过滤,例如Median.所以,我想在像素坐标而不是normalized(tc0)中工作,然后将结果转换回规范化的坐标.因此,我想使用gl_FragCoord而不是uv属性(tc0).但是我不知道怎么回到标准化的坐标,因为我不知道gl_FragCoords的范围.知道我怎么能得到它吗?我已经到了那么远,使用固定值进行"标准化",虽然它不能完美地工作,因为它会导致拉伸和平铺(但至少会显示一些东西):
//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));
}
Run Code Online (Sandbox Code Playgroud)
所以,简单的问题是,我应该使用什么来取代vec2(256, 256)我可以获得相同的结果,就像我使用uv coords一样.
谢谢!
Mat*_*gro 19
gl_FragCoord在屏幕坐标中,因此要获得标准化坐标,您需要除以视口宽度和高度.您可以使用统一变量将该信息传递给着色器,因为它没有内置变量.
| 归档时间: |
|
| 查看次数: |
11902 次 |
| 最近记录: |