如何阻止着色器扭曲纹理

时间:2019-06-02 17:39:40

标签: c++ glsl shader sfml

我正在尝试学习如何使用着色器和GLSL。其中一个着色器正在工作,但正在扭曲正在处理的精灵的纹理。我正在SFML上完成所有操作。

左侧纹理失真,右侧实际纹理:

img

问题出在这行

当我开始时,纹理被上下颠倒了,但是从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
}

1 个答案:

答案 0 :(得分:1)

找到了解决方案。如果需要其他帮助,请在此处发布。 更改

vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour

收件人

vec4 Color = texture2D(source, gl_TexCoord[0].xy);//Gets the current pixture colour

将修复失真效果。