【问题标题】:How to stop a Shader from distorting a texture如何阻止着色器扭曲纹理
【发布时间】:2019-06-02 17:39:40
【问题描述】:

我正在尝试学习如何使用着色器和使用 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
}

【问题讨论】:

  • OpenGL 纹理 [0,0] 角是左下而不是左上角,如您所料。您可以在将图像加载到纹理之前垂直镜像图像,或更改 UV 坐标。
  • 谢谢,但它已经这样做了。 (texCoord.x,1.0-texCoord.y);//反转y坐标这将纹理垂直设置为正确的方式。我遇到的问题是 vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy);正在返回一个扭曲的纹理。

标签: c++ glsl shader sfml


【解决方案1】:

找到了解决办法。如果其他人需要帮助,请在此处发布。 改变

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

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

将修复失真效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多