6

libgdxをopenglラッパーとして試していますが、グラフィックレンダリングに問題があります。何らかの理由で、Androidデバイス上のすべての画像(テクスチャ)がlibgdxを使用すると少しぼやけて見えます。これにはテキスト(フォント)も含まれます。

テキストの場合、ビットマップフォントを使用しているためだと思いましたが、代替手段が見つかりませんでした。「gdx-stb-truetype」というライブラリがあることがわかりましたが、その方法がわかりません。ダウンロードして使用してください。

通常の画像の場合、拡大縮小せずに画像全体を表示した場合でも、特にデバイス(ギャラクシーネクサス)にこのような優れた画面がある場合は、コンピューターの画面で見たのと同じくらい鮮明に見えると思います。次のコードを使用して、アンチエイリアシングをオフに設定しようとしました:

final AndroidApplicationConfiguration androidApplicationConfiguration=new AndroidApplicationConfiguration();
androidApplicationConfiguration.numSamples=0; //tried the value of 1 too.
...

また、スケーリング方法をさまざまな方法に設定しようとしましたが、うまくいきませんでした。例:

texture.setFilter(TextureFilter.Nearest,TextureFilter.Nearest);

テストとして、デバイスで見られる解像度とまったく同じ鮮明な画像を見つけました(ボタンバーがあるため、ギャラクシーネクサスの場合は720x1184)、libgdxの背景に配置しましたアプリ 。もちろん、テクステをロードするために余分な空白を追加する必要があったので、画像の最終的なサイズ(コンテンツと空のスペースを含む)は、幅と高さの両方で2の累乗です(この場合は1024x2048)場合) 。デスクトップアプリでは、問題ないように見えます。デバイス上では、ぼやけて見えました。

私が気付いた奇妙なことは、デバイスの向き(水平<=>垂直)を変更すると、回転アニメーションが開始する前の非常に短い時間、画像とテキストの両方が非常によく見えることです。

確かにlibgdxはこれを処理できます。Androidのapi-testsプロジェクトのopengl部分は画像をうまく表示するからです。

誰か助けてくれませんか?

@ user1130529:私はspritebatchを使用します。また、ビューポートを設定するために私が行うことは次のとおりです。アスペクト比を維持するかどうかに関係なく発生します。

public static final int          VIRTUAL_WIDTH         =720;
public static final int          VIRTUAL_HEIGHT        =1280-96;
private static final float       ASPECT_RATIO          =(float)VIRTUAL_WIDTH/(float)VIRTUAL_HEIGHT;
...
@Override
public void resize(final int width,final int height)
  {
  // calculate new viewport
  if(!KEEP_ASPECT_RATIO)
    {
    _viewport=new Rectangle(0,0,Gdx.app.getGraphics().getWidth(),Gdx.app.getGraphics().getHeight());
    Gdx.app.log("DEBUG","size:"+_viewport);
    return;
    }
  final float currentAspectRatio=(float)width/(float)height;
  float scale=1f;
  final Vector2 crop=new Vector2(0f,0f);
  if(currentAspectRatio>ASPECT_RATIO)
    {
    scale=(float)height/(float)VIRTUAL_HEIGHT;
    crop.x=(width-VIRTUAL_WIDTH*scale)/2f;
    }
  else if(currentAspectRatio<ASPECT_RATIO)
    {
    scale=(float)width/(float)VIRTUAL_WIDTH;
    crop.y=(height-VIRTUAL_HEIGHT*scale)/2f;
    }
  else scale=(float)width/(float)VIRTUAL_WIDTH;
  final float w=VIRTUAL_WIDTH*scale;
  final float h=VIRTUAL_HEIGHT*scale;
  _viewport=new Rectangle(crop.x,crop.y,w,h);
  Gdx.app.log("DEBUG","viewport:"+_viewport+" originalSize:"+VIRTUAL_WIDTH+","+VIRTUAL_HEIGHT+" aspectRatio:"+ASPECT_RATIO+" currentAspectRatio:"+currentAspectRatio);
  }
4

3 に答える 3

2

これを試して:

TextureRegion.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
于 2012-04-30T05:40:45.893 に答える