如何阻止着色器扭曲纹理
How to stop a Shader from distorting a texture
我正在尝试学习如何使用着色器和使用 GLSL。其中一个着色器正在工作,但正在扭曲它正在处理的精灵的纹理。我在 SFML 上做这一切。
左边是扭曲的纹理,右边是实际纹理:
问题出在这一行
当我开始时,纹理被颠倒渲染,但从 1 中减去坐标的 y 分量解决了这个问题。导致问题的行是
vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy);
其中 sourceSize 是一个统一传递的东西作为 vec2 的分辨率。我一直在将各种值传递给它并获得不同的扭曲版本的纹理。我想知道是否有一种方法可以传递比率或避免这种失真。
纹理像素大小:512x512
为上图传入的值:512x512
着色器
uniform sampler2D source;
uniform vec2 sourceSize;
uniform float time;
void main( void )
{
vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy); //Gets the pixel position in a range of 0.0 to 1
texCoord = vec2 (texCoord.x,1.0-texCoord.y);//Inverts the y co ordinate
vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour
gl_FragColor = Color;//Output
}
找到解决办法。如果其他人需要帮助,请将其张贴在这里。
改变
vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour
到
vec4 Color = texture2D(source, gl_TexCoord[0].xy);//Gets the current pixture colour
将修复失真效果。
我正在尝试学习如何使用着色器和使用 GLSL。其中一个着色器正在工作,但正在扭曲它正在处理的精灵的纹理。我在 SFML 上做这一切。
左边是扭曲的纹理,右边是实际纹理:
问题出在这一行
当我开始时,纹理被颠倒渲染,但从 1 中减去坐标的 y 分量解决了这个问题。导致问题的行是
vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy);
其中 sourceSize 是一个统一传递的东西作为 vec2 的分辨率。我一直在将各种值传递给它并获得不同的扭曲版本的纹理。我想知道是否有一种方法可以传递比率或避免这种失真。
纹理像素大小:512x512 为上图传入的值:512x512
着色器
uniform sampler2D source;
uniform vec2 sourceSize;
uniform float time;
void main( void )
{
vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy); //Gets the pixel position in a range of 0.0 to 1
texCoord = vec2 (texCoord.x,1.0-texCoord.y);//Inverts the y co ordinate
vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour
gl_FragColor = Color;//Output
}
找到解决办法。如果其他人需要帮助,请将其张贴在这里。 改变
vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour
到
vec4 Color = texture2D(source, gl_TexCoord[0].xy);//Gets the current pixture colour
将修复失真效果。