我正在尝试学习如何使用着色器和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
将修复变形效果。