GLSL像素化着色器中的边界人工制品

时间:2012-07-12 12:43:40

标签: glsl shader fragment-shader

我在GLSL中做一个简单的像素化着色器。 除了我在像素化边界看到的边界神器外,一切都按预期工作。

代码是:

precision mediump float;

uniform sampler2D Texture0;
uniform int pixelCount;
varying vec2 fTexCoord;

void main(void)
{
   float pixelWidth = 1.0/float(pixelCount);

   float x = floor(fTexCoord.x/pixelWidth)*pixelWidth + pixelWidth/2.0;
   float y = floor(fTexCoord.y/pixelWidth)*pixelWidth + pixelWidth/2.0;

   gl_FragColor = texture2D(Texture0, vec2(x, y));
}

请参阅附图。

我对为什么会发生这种情况一无所知 请帮帮我...

Border artifact between pixelations.

1 个答案:

答案 0 :(得分:1)

我认为你的问题与纹理插值有关。

您是否在纹理采样器中使用GL_NEAREST(这会使纹理采样器使用点采样器而不是某些插值)?

glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );

此外,您可能不应该使用mipmap。

了解实际纹理图像的外观以及几何体的外观(假设您渲染单个四边形)也很有用。