9

LibGDX でミップマップ フィルタリングを使用しようとすると、画像がまったく表示されません。

私は LibGDX を初めて使用し、3 つの回転するスケーリングされた円を含む単純な 2D シーンを持っています。それらをアンチエイリアスするために、線形フィルタリングを使用したいと考えました。アドバイスとして、私はこの記事を参照しました。この記事では、大幅にスケーリングされた画像の場合、ミップマップを使用して速度または品質を向上させることができると述べています。

最初の予想外の外観は、すべての画像が縮小されたという事実にもかかわらず、magFilter が線形である場合にのみ線形フィルターが表示されることでした。言い換えると:

このコードは、縮小された画像の線形フィルターを表示します。

parentTexture.setFilter(TextureFilter.Nearest, TextureFilter.Linear);

このコードはしません:

parentTexture.setFilter(TextureFilter.Linear, TextureFilter.Nearest);

これは libGDX 関数とは反対のようです:

void com.badlogic.gdx.graphics.Texture.setFilter(TextureFilter minFilter, TextureFilter magFilter)

これは、libgdx が間違っている (可能性は低い) か、記事が間違っている (可能性は低い) か、またはテクスチャ フィルターを理解していないことを示していることを除けば、私には問題ありません。後者は、mipmap フィルターを試すと特に可能性が高いようです。

このコードでは何も表示されません

parentTexture.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.Linear);

このコードは表示されますが、最も近いフィルタリングが適用されます

parentTexture.setFilter(TextureFilter.Linear, TextureFilter.MipMapLinearLinear);

私が間違っている場所の説明は大歓迎です。私は他の場所を検索しましたが、libGDX のテクスチャ フィルターは非常に具体的であるため、この記事を除けば、役立つ情報はあまり見つかりませんでした。

4

4 に答える 4

12

私はこれと同じ問題を抱えていましたが、修正は非常に簡単であることが判明しました。を作成するときはTexture、ミップマップを使用するように指定する必要があります。

Texture次のように、コンストラクターに 2 番目のパラメーターを渡すだけです。

Texture myTexture = new Texture(Gdx.files.internal("myImage.png"), true);

API ドキュメントですべてのTextureクラス コンストラクターを表示できます: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Texture.html

于 2014-08-05T21:01:59.817 に答える
3

Mitesh が回答で述べたように、ミップマップを生成するように Libgdx に指示していないため、ミップマップ フィルターは機能しません。

アセットマネージャーを使用している場合、コードは次のようになります

 TextureParameter param = new TextureParameter();
 param.genMipMaps = true; // enabling mipmaps

 manager.load("path/to/texfile.png", Texture.class, param);

 Texture tex = manager.get("path/to/texfile.png", Texture.class);
 tex.setFilter(TextureFilter.MipMap, TextureFilter.Nearest);
于 2014-07-18T14:08:11.313 に答える
1

画像には複数の問題がある可能性があります。

  1. 354X420 のようなサイズの画像を使用している場合は、2 のべき乗でなければなりません。この場合、512X512 またはその他の 2 の累乗の画像を取得する必要があります。

  2. Mipmap フィルタリングを有効にする場合は、libgdx に mapmap を生成するかどうかを伝える boolean genMipMaps を使用して有効にする必要があります。

于 2013-06-26T19:33:27.323 に答える
0

同じ minFilter と maxFilter を使用してみてください。同様の問題があり、TextureFilter.Linear、TextureFilter.Linear、または両方の MipMap を配置すると、問題は解決します。お役に立てれば。

于 2013-03-13T20:25:04.960 に答える