gpt4 book ai didi

libgdx - libgdx 中的距离场字体

转载 作者:行者123 更新时间:2023-12-02 06:29:58 26 4
gpt4 key购买 nike

我正在尝试渲染平滑的可缩放位图字体。检查后question answers之一提到使用距离场字体。

我正在按照 LibGDX wiki article 中提到的方式进行操作关于距离场字体。但是我无法让它工作。字体变得模糊。

example preview

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

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();

}
}

我不确定我是否正确理解了距离场字体的功能。如果有人可以解释如何使字体平滑。

最佳答案

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

It looks like this with different smoothing.

它看起来像这样,具有不同的平滑效果。

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();

}

关于libgdx - libgdx 中的距离场字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24351645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com