ピクセルシェーダーを使用して滑らかなテキストを実現するにはどうすればよいですか?

peterSweter

ゲームにスムーズなテキストを入れたい。解決策はピクセルシェーダーであることがわかったので、githubのドキュメントに記載されているようなすべてのことを行いますfont.vertファイルとfont.fragファイルがあり、このドキュメントでは、const float Smoothing = 0.25f /(spread * scale)を使用する必要があると述べられています。私のフォントは48ピクセルサイズなので、0.25f / 48.0fを使用しますが、フォントはシャープで不規則です。私は何が間違っていますか?

これはfont.fragです:

#ifdef GL_ES
precision mediump float;
#endif

uniform sampler2D u_texture;

varying vec4 v_color;
varying vec2 v_texCoord;

const float smoothing = 0.25/48.0 ;

void main() {
    float distance = texture2D(u_texture, v_texCoord).a;
    float alpha = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);
    gl_FragColor = vec4(v_color.rgb, alpha);
}

私はフォントに線形フィルターを使用しています:

arial_white_48.getRegion().getTexture().setFilter(TextureFilter.Linear,  TextureFilter.Linear);

テキスト「あなたのスコア」は、ピクセルシェーダーと線形フィルターで書かれています

テキスト「ハイスコア」はリニアフィルターのみで書かれていますが、シャープです

私のテキスト

vdlmrc

さて、それは8か月前の質問ですが、おそらくあなたはまだ答えに興味を持っています。または、少なくとも同じ問題を抱えている人はそうなるでしょう。

滑らかなフォントにするために、フリータイプのフォントを使用し、ロード画面で作成します。そのためには、資産運用会社が必要です。

通常、私はメインアクティビティでアセットマネージャーを作成します。

public class MyGdxGame extends Game implements ApplicationListener {
    public SpriteBatch batch;
    public AssetManager assets;

    @Override
    public void create () {
        batch = new SpriteBatch();
        assets = new AssetManager();

        this.setScreen(new LoadingScreen(this));
    }

    @Override
    public void render () {
        super.render();
    }
}

そして、ロード画面で、.ttfファイルに基づいて任意のサイズのフォントを作成します。

public class LoadingScreen implements Screen{
    final MyGdxGame game;

    public LoadingScreen(final MyGdxGame gam){
        game = gam;

        FileHandleResolver resolver = new InternalFileHandleResolver();
        game.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
        game.assets.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));

        FreeTypeFontLoaderParameter size1Params = new FreeTypeFontLoaderParameter();
        size1Params.fontFileName = "Fonts/calibri.ttf";         
        size1Params.fontParameters.genMipMaps = true;                   
        size1Params.fontParameters.minFilter = TextureFilter.Linear;
        size1Params.fontParameters.magFilter = TextureFilter.Linear;                        
        size1Params.fontParameters.size = Gdx.graphics.getWidth()/18;
        game.assets.load("font1.ttf", BitmapFont.class, size1Params);

        FreeTypeFontLoaderParameter size2Params = new FreeTypeFontLoaderParameter();
        size2Params.fontFileName = "Fonts/calibri.ttf";         
        size2Params.fontParameters.genMipMaps = true;                   
        size2Params.fontParameters.minFilter = TextureFilter.Linear;
        size2Params.fontParameters.magFilter = TextureFilter.Linear;                        
        size2Params.fontParameters.size = Gdx.graphics.getWidth()/6;
        game.assets.load("font2.ttf", BitmapFont.class, size2Params);
    }

}

この方法を使用すると、任意のサイズの非常に滑らかなフォントを作成できます。それらをスムーズにする秘訣は、次の3行にあります。

        size2Params.fontParameters.genMipMaps = true;                   
        size2Params.fontParameters.minFilter = TextureFilter.Linear;
        size2Params.fontParameters.magFilter = TextureFilter.Linear;

最後に、フォントの1つを使用する必要がある場合は、次を使用する必要があります。

game.assets.get("font1.ttf", BitmapFont.class)

フォントの名前に注意してください。この例で作成した2つのフォント、font1およびfont2では、単一の.ttfファイルを使用しましたcalibri.ttfが、コードで作成したフォントを呼び出すとき、そのような.ttfファイルがない場合でも、font1.ttfまたはを呼び出す必要がありfont2.ttfます。資産。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

確実なテストをスキップしてフェイルセーフテストを実行するにはどうすればよいですか?

分類Dev

計算シェーダーからテクスチャピクセルを1つに変更するにはどうすればよいですか?

分類Dev

クラウドHSMサービスプロバイダーがシミュレーションソフトウェアではなく物理ハードウェアセキュリティモジュールを実際に使用していることを確認するにはどうすればよいですか?

分類Dev

Sublime Textで、正規表現を使用して、ブレークを含まない、ダブルブレークとシングルブレークの間のすべてのテキストを見つけるにはどうすればよいですか?

分類Dev

コピー/貼り付けでクラッシュしないプロキシを使用してtkinterテキストウィジェットが変更されたかどうかを追跡するにはどうすればよいですか?

分類Dev

matplotlibを使用してカートピー極心平射図で滑らかなグリッド線を取得するにはどうすればよいですか?

分類Dev

所有していないキャンバスからピクセルデータを取得するにはどうすればよいですか?

分類Dev

Windows 7のフォルダからファイル名をテキストとしてコピーするにはどうすればよいですか?

分類Dev

ID3D11ShaderReflectionからシェーダーの種類(頂点/ピクセルなど)を取得するにはどうすればよいですか?

分類Dev

セル値が存在する場合はそれをチェックしてシートAでアクションを実行し、それをキーとして使用して、すでに処理されているため、次の実行でスキップするにはどうすればよいですか?

分類Dev

AHKを使用してVisualStudioのようなチェーンホットキーを実現するにはどうすればよいですか?

分類Dev

null許容列を使用して滑らかなテーブル定義を作成するにはどうすればよいですか?

分類Dev

ピクセルシェーダーをキャンバス要素に適用するにはどうすればよいですか?

分類Dev

MRFの滑らかで近隣構造のGAMを使用してテストデータを予測するにはどうすればよいですか?

分類Dev

シェルスクリプト(netcat)でサーバーからクライアントにコードとしてテキストを実行するにはどうすればよいですか?

分類Dev

Radareを使用してテキスト付きのクリッピーをレンダリングするにはどうすればよいですか?

分類Dev

シェルスクリプトをリモートで実行しながら依存関係を解決するにはどうすればよいですか?

分類Dev

スクリプトを使用してUnityUIのプレースホルダーテキストを変更するにはどうすればよいですか?

分類Dev

pywinautoを使用してコピーしたテキストをテキストファイルに送信するにはどうすればよいですか?

分類Dev

モーダルボックスを使用してテキストを個別にロードするにはどうすればよいですか?

分類Dev

シェルスクリプトを使用して文からストップワードを削除するにはどうすればよいですか?

分類Dev

bash変数を使用してシェルスクリプトからMYSQLスクリプトを実行するにはどうすればよいですか?

分類Dev

キーボードを使用してシステムトレイにアクセスするにはどうすればよいですか?

分類Dev

セレンとPythonを使用してウェブサイトからツールチップテキストを取得するにはどうすればよいですか?テキストはJavaScriptから取得されます

分類Dev

QTextEditを使用してシェルのようなスクリプト環境をエミュレートするにはどうすればよいですか?

分類Dev

QTextEditを使用してシェルのようなスクリプト環境をエミュレートするにはどうすればよいですか?

分類Dev

Googleスプレッドシートのクエリ関数のselectステートメントを使用してセルからテキストを取得するにはどうすればよいですか?

分類Dev

ファイルから読み取り、シェルスクリプトを使用してコンテンツを別の実行者に渡すときに、二重引用符をエスケープするにはどうすればよいですか?

分類Dev

シェルスクリプトからマシン上で特定のポートが開いているかどうかを確認し、それに基づいてアクションを実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    確実なテストをスキップしてフェイルセーフテストを実行するにはどうすればよいですか?

  2. 2

    計算シェーダーからテクスチャピクセルを1つに変更するにはどうすればよいですか?

  3. 3

    クラウドHSMサービスプロバイダーがシミュレーションソフトウェアではなく物理ハードウェアセキュリティモジュールを実際に使用していることを確認するにはどうすればよいですか?

  4. 4

    Sublime Textで、正規表現を使用して、ブレークを含まない、ダブルブレークとシングルブレークの間のすべてのテキストを見つけるにはどうすればよいですか?

  5. 5

    コピー/貼り付けでクラッシュしないプロキシを使用してtkinterテキストウィジェットが変更されたかどうかを追跡するにはどうすればよいですか?

  6. 6

    matplotlibを使用してカートピー極心平射図で滑らかなグリッド線を取得するにはどうすればよいですか?

  7. 7

    所有していないキャンバスからピクセルデータを取得するにはどうすればよいですか?

  8. 8

    Windows 7のフォルダからファイル名をテキストとしてコピーするにはどうすればよいですか?

  9. 9

    ID3D11ShaderReflectionからシェーダーの種類(頂点/ピクセルなど)を取得するにはどうすればよいですか?

  10. 10

    セル値が存在する場合はそれをチェックしてシートAでアクションを実行し、それをキーとして使用して、すでに処理されているため、次の実行でスキップするにはどうすればよいですか?

  11. 11

    AHKを使用してVisualStudioのようなチェーンホットキーを実現するにはどうすればよいですか?

  12. 12

    null許容列を使用して滑らかなテーブル定義を作成するにはどうすればよいですか?

  13. 13

    ピクセルシェーダーをキャンバス要素に適用するにはどうすればよいですか?

  14. 14

    MRFの滑らかで近隣構造のGAMを使用してテストデータを予測するにはどうすればよいですか?

  15. 15

    シェルスクリプト(netcat)でサーバーからクライアントにコードとしてテキストを実行するにはどうすればよいですか?

  16. 16

    Radareを使用してテキスト付きのクリッピーをレンダリングするにはどうすればよいですか?

  17. 17

    シェルスクリプトをリモートで実行しながら依存関係を解決するにはどうすればよいですか?

  18. 18

    スクリプトを使用してUnityUIのプレースホルダーテキストを変更するにはどうすればよいですか?

  19. 19

    pywinautoを使用してコピーしたテキストをテキストファイルに送信するにはどうすればよいですか?

  20. 20

    モーダルボックスを使用してテキストを個別にロードするにはどうすればよいですか?

  21. 21

    シェルスクリプトを使用して文からストップワードを削除するにはどうすればよいですか?

  22. 22

    bash変数を使用してシェルスクリプトからMYSQLスクリプトを実行するにはどうすればよいですか?

  23. 23

    キーボードを使用してシステムトレイにアクセスするにはどうすればよいですか?

  24. 24

    セレンとPythonを使用してウェブサイトからツールチップテキストを取得するにはどうすればよいですか?テキストはJavaScriptから取得されます

  25. 25

    QTextEditを使用してシェルのようなスクリプト環境をエミュレートするにはどうすればよいですか?

  26. 26

    QTextEditを使用してシェルのようなスクリプト環境をエミュレートするにはどうすればよいですか?

  27. 27

    Googleスプレッドシートのクエリ関数のselectステートメントを使用してセルからテキストを取得するにはどうすればよいですか?

  28. 28

    ファイルから読み取り、シェルスクリプトを使用してコンテンツを別の実行者に渡すときに、二重引用符をエスケープするにはどうすればよいですか?

  29. 29

    シェルスクリプトからマシン上で特定のポートが開いているかどうかを確認し、それに基づいてアクションを実行するにはどうすればよいですか?

ホットタグ

アーカイブ