C++ 如何阻止着色器扭曲纹理

C++ 如何阻止着色器扭曲纹理,c++,glsl,shader,sfml,C++,Glsl,Shader,Sfml,我正在尝试学习如何使用着色器和GLSL。其中一个着色器正在工作,但正在扭曲它所处理的精灵的纹理。我在SFML上做这些 左侧为扭曲纹理,右侧为实际纹理: 问题出在这一行 当我开始渲染时,纹理是颠倒的,但是从1中减去cordinates的y分量修复了这个问题。导致问题的线路是 vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy); 其中sourceSize是一个统一的向量,它以向量2的形式传递某个对象的分辨率。我一直在把不同的值传递给它,得到不同的纹

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

左侧为扭曲纹理,右侧为实际纹理:

问题出在这一行

当我开始渲染时,纹理是颠倒的,但是从1中减去cordinates的y分量修复了这个问题。导致问题的线路是

vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy);
其中sourceSize是一个统一的向量,它以向量2的形式传递某个对象的分辨率。我一直在把不同的值传递给它,得到不同的纹理扭曲版本。我想知道是否有一种方法可以传递一个比率或者避免这种扭曲

纹理大小(像素):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


将修复失真效果。

OpenGL纹理[0,0]角是左下角,而不是您所期望的左上角。您可以在将图像加载到纹理之前垂直镜像图像,或者更改UV坐标。谢谢,但它已经在这样做了。(texCoord.x,1.0-texCoord.y)//反转y坐标这会将纹理设置为垂直的正确方向。我遇到的问题是vec2 texCoord=(gl_FragCoord.xy/sourceSize.xy);正在返回扭曲的纹理。
vec4 Color = texture2D(source, gl_TexCoord[0].xy);//Gets the current pixture colour