当前位置: 首页 > 知识库问答 >
问题:

libgdx中的距离字段字体

司空凌
2023-03-14

我正在尝试渲染平滑的可缩放位图字体。在检查完这个问题后,使用距离字段字体列出了其中一个答案。

我所做的正是LibGDX维基文章中提到的关于距离域字体的内容。但是我不能让它工作。字体呈现模糊。

这是我用来生成此输出的代码

public class FontRenderTest implements ApplicationListener {
private Texture texture;
private SpriteBatch spriteBatch;
private BitmapFont font;

@Override
public void create() {
    spriteBatch = new SpriteBatch();

    Texture texture = new Texture(Gdx.files.internal("Raleway.png"), true); // true enables mipmaps
    texture.setFilter(TextureFilter.MipMapLinearNearest, TextureFilter.Linear); // linear filtering in nearest mipmap image

    font = new BitmapFont(Gdx.files.internal("Raleway.fnt"), new TextureRegion(texture), false);
}


@Override
public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    spriteBatch.begin();
    font.draw(spriteBatch, "This is hazy !!", 100, 150);
    spriteBatch.end();

}
}

我不确定我是否正确理解距离字段字体的功能。如果有人能解释一下如何使字体平滑。

共有2个答案

陈松
2023-03-14

使用由DistanceFieldFont创建的着色器。createDistanceFieldShader。

何升
2023-03-14

我认为它需要一个着色器,如果我没记错的话,着色器需要GL20。正如wiki中所说,您需要. frag和. vert文件。我在Libgdx测试的帮助下修改了您的代码:http://git.io/-yAmNg。

这看起来像是不同的平滑。

public class FontRenderTest implements ApplicationListener {                                                                
private Texture texture;                                                                                                    
private SpriteBatch spriteBatch;                                                                                            
private BitmapFont font;                                                                                                    
private DistanceFieldShader distanceFieldShader;                                                                            
private static class DistanceFieldShader extends ShaderProgram {                                                            
    public DistanceFieldShader () {                                                                                         
        // The vert and frag files are copied from http://git.io/yK63lQ (vert) and http://git.io/hAcw9Q (the frag)          
        super(Gdx.files.internal("data/shaders/distancefield.vert"), Gdx.files.internal("data/shaders/distancefield.frag"));
        if (!isCompiled()) {                                                                                                
            throw new RuntimeException("Shader compilation failed:\n" + getLog());                                          
        }                                                                                                                   
    }                                                                                                                       

    /** @param smoothing a value between 0 and 1 */                                                                         
    public void setSmoothing (float smoothing) {                                                                            
        float delta = 0.5f * MathUtils.clamp(smoothing, 0, 1);                                                              
        setUniformf("u_lower", 0.5f - delta);                                                                               
        setUniformf("u_upper", 0.5f + delta);                                                                               
    }                                                                                                                       
}                                                                                                                           
    @Override                                                                                                                   
    public void create() {                                                                                                      
        spriteBatch = new SpriteBatch();                                                                                        

        Texture texture = new Texture(Gdx.files.internal("hiero.png"), true); // true enables mipmaps                           
        texture.setFilter(TextureFilter.MipMapLinearNearest, TextureFilter.Linear); // linear filtering in nearest mipmap image 

        font = new BitmapFont(Gdx.files.internal("hiero.fnt"), new TextureRegion(texture), false);                              
        distanceFieldShader = new DistanceFieldShader();                                                                        
    }
       @Override                                                                             
   public void render() {                                                                
       Gdx.gl.glClearColor(0, 0, 0, 1);                                                  
       Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);                                         

       spriteBatch.begin();                                                              

       spriteBatch.setShader(distanceFieldShader);                                       
       font.draw(spriteBatch, "This is pretty sharp !!", 100, 120);                      
       distanceFieldShader.setSmoothing(0f);                                             

       spriteBatch.setShader(distanceFieldShader);                                       
       font.draw(spriteBatch, "This is hazy !!", 100, 150);                              
       distanceFieldShader.setSmoothing(1f);                                             

       spriteBatch.setShader(distanceFieldShader);                                       
       font.draw(spriteBatch, "This is pretty smooth !!", 100, 180);                     
       distanceFieldShader.setSmoothing(1/2f);                                           

       spriteBatch.end();                                                                

   }
 类似资料:
  • 有谁能解释一下这个例子中的8道难题中如何计算曼哈顿距离吗http://ai.ia.agh.edu.pl/wiki/pl:prolog:pllib:sliding_puzzle? 如何计算: a(0,0). a(1,0). a(2,1). a(3,2). a(4,3). a(5,4). a(6,3). a(7,2). a(8,1). b(0,0). b(1,1). b(2,0). b(3,1). b

  • 问题内容: 在Python + Sqlite中是否有可用的字符串相似性度量,例如与模块有关? 用例示例: 此查询应匹配ID为1的行,但不匹配ID为2的行: 如何在Sqlite + Python中做到这一点? 关于我到目前为止发现的注释: 该Levenshtein距离,即单字符编辑(插入,删除或替换)的最小数量需要改变一个字到另一个,可能是有用的,但我不知道是否SQLite中存在的正式实施(我看到一

  • 问题内容: 有谁知道我如何在libGDX中使用TTF字体?我环顾四周,已经看到有关StbTrueTypeFont的信息,但似乎没有出现在最新版本中。 编辑:我发现StbTrueType字体的东西,jar文件位于扩展目录中。我已将其添加到我的项目中。现在,我只需要弄清楚如何使用它。有什么例子吗? 问题答案: 是的,您绝对需要按照编辑中的说明将jar 添加到项目中。很简单,这就是您将如何使用它的方法…

  • 设置行距 各文字行间的垂直间距称为 leading(行距)(与 sledding 押韵)。测量行距时,计算的是一行文本的基线到上一行文本基线的距离。基线是大多数字母排于其上的一条不可见直线。 默认自动行距选项按字体大小的 120% 设置行距(例如,10 点文字的行距为 12 点)。使用自动行距时,“字符”面板的“行距”菜单将在圆括号内显示行距值。可以使用以下方式来更改此默认自动行距:从“段落”面板

  • 我使用Levenshtein算法来查找两个字符串之间的相似性。这是我正在制作的程序的一个非常重要的部分,所以它需要有效。问题是算法没有发现以下示例相似: CONAIR AIRCON 编辑:我还研究了“Damerau-Levenshtein”算法,它增加了换位。问题是这种转换只针对相邻的字符(而不是多个字符)。

  • 问题内容: 通过AngularJS,我可以使用或检测用户是否输入了该字段。但是,我只想在用户离开字段区域之后进行客户端验证。这是因为,当用户输入电子邮件或电话之类的字段时,他们总是会抛出错误,直到他们完成完整的电子邮件键入为止,这并不是最佳的用户体验。 例 更新: Angular现在附带了一个自定义模糊事件:https : //docs.angularjs.org/api/ng/directive