2

我在 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));
}

请看附图。

我不知道为什么会这样。
请在这件事上给予我帮助...

像素化之间的边界伪影。

4

1 回答 1

1

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

您是否正在使用GL_NEAREST纹理采样器(这使得纹理采样器使用点采样器而不是一些插值)?

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

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

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

于 2012-07-12T13:44:48.583 回答