Fonts 如何修复边缘有符号距离字段输出?

Fonts 如何修复边缘有符号距离字段输出?,fonts,opengl-es,Fonts,Opengl Es,我尝试使用OpenGL ES 2.0和有符号距离字段渲染一些文本/字体。我为字体创建了一个SDF位图,可以将一些文本渲染到屏幕上,但显示的文本边缘很深 在这里,您可以看到我的签名距离字段输入的一部分: 在这里,您可以在屏幕上看到我的输出: 生成纹理并用位图填充: GL.Enable(EnableCap.Texture2D); GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest); GL.GenText

我尝试使用OpenGL ES 2.0和有符号距离字段渲染一些文本/字体。我为字体创建了一个SDF位图,可以将一些文本渲染到屏幕上,但显示的文本边缘很深

在这里,您可以看到我的签名距离字段输入的一部分:

在这里,您可以在屏幕上看到我的输出:

生成纹理并用位图填充:

    GL.Enable(EnableCap.Texture2D);
    GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
    GL.GenTextures(1, out TextureId); 
    GL.BindTexture(TextureTarget.Texture2D, TextureId); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int) TextureMinFilter.NearestMipmapLinear);
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int) TextureMagFilter.Linear);
    GL.GenerateMipmap(TextureTarget.Texture2D);
    GL.TexImage2D(TextureTarget2d.Texture2D,0,TextureComponentCount.Rgba,Width,Height,0,PixelFormat.Rgba,PixelType.UnsignedByte,ImageData);
    GL.GenerateMipmap(TextureTarget.Texture2D);
片段着色器:

void main() 
{   
    float distance = texture2D(tex_object, tc).a;
    float alpha = smoothstep(0.5 - 0.05, 0.5 + 0.05, distance); 
    fragColor = vec4(fColor.rgb, fColor.a * alpha);
}
着色器编译正确,值传递正确,因为会显示字母。
有人知道如何修复此问题并使其更平滑吗?

您使用的是Nearest MipmapLinear,而您应该使用LinearMipmapNearest

NearestMipmapLinear在mipmap级别之间平滑插值,并在mips中执行点过滤


LinearMipmapNearest是mipmap级别之间的点过滤和mips中的双线性过滤。

显示您的代码。@BDL代码添加当我更改TextureMinFilter时,这没有什么区别。最接近的mipmaplinear和LinearMipmapNearest看起来几乎相同。