2013-03-13 12 views
5

Kiedy próbuję użyć filtrowania mipmap w LibGDX, nie pojawia się żaden z obrazów.filtry tekstur libgdx i mipmap

Jestem nowy w LibGDX i mam prostą scenę 2d z trzema obrotowymi, skalowanymi okręgami. W celu wygładzenia ich, chciałem zastosować filtrowanie liniowe. Aby uzyskać poradę, przyjrzałem się this article, która mówi, że w przypadku silnie skalowanych obrazów mipmap może być użyty do poprawy szybkości lub jakości.

Pierwszy nieoczekiwany wygląd był taki, że pomimo tego, że wszystkie moje obrazy zostały pomniejszone, widziałem tylko filtr liniowy, jeśli filtr mag był liniowy. Innymi słowy:

Ten kod pokaże filtr liniowy dla minified obrazów:

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

whlie ten kod nie będzie:

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

co wydaje się przeciwnie do libgdx funkcja:

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

To mi nie przeszkadza, tyle że wskazuje, że albo libgdx jest źle (mało prawdopodobne), artykuł jest błędny (mało prawdopodobny), albo nie rozumiem filtrów tekstur. Ta ostatnia wydaje się szczególnie prawdopodobna, gdy próbuję filtrów mipmap.

Ten kod powoduje nic do wyświetlenia

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

kodu Wyświetla, ale z dokładnością do filtrowania

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

Wszelkie wyjaśnienia, gdzie się mylę byłoby bardzo mile widziane. Szukałem gdzie indziej, ale filtry tekstur w libGDX są dość specyficzne, więc oprócz artykułu, nie znalazłem wiele, aby pomóc.

Odpowiedz

0

Spróbuj użyć tego samego minFilter i maxFilter. Miałem podobny problem i jeśli wstawię TextureFilter.Linear, TextureFilter.Linear lub oba MipMap problem zostanie rozwiązany. Mam nadzieję, że to pomoże.

+0

to działało dla filtra liniowego, ale gdy zrobiłem to z filtrem MipMap, tekstury stały się białe. Myślę, że to dlatego, że filtr MipMap do maksymalizacji nie ma sensu w pamięci. – Kenkron

1

Nie może być wiele problemów z obrazka:

  1. To powinno być potęgą 2, jeśli używasz obrazu o rozmiarze jak 354X420, to nie będzie działać. W takim przypadku musisz zrobić zdjęcie o rozdzielczości 512X512 lub innej mocy o wartości 2.

  2. Jeśli chcesz włączyć filtrowanie Mipmap, musisz włączyć to za pomocą boolean genMipMaps, które informuje libgdx, czy generować mapy map.

+0

Do pierwszego punktu obraz jest potęgą dwóch, a nawet gdyby tak nie było, wszystko co wspiera OpenGL 2.0 es byłoby w porządku z tym. – Kenkron

3

Podobnie jak mitesh powiedział w swoim answer Mipmapy filtrów nie działa, ponieważ nie mówią libgdx wygenerować mipmaps.

jeśli używasz menedżera aktywa kod będzie coś takiego

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

miałem ten sam problem, a poprawka okazała się szalenie proste. Kiedy tworzysz Texture, musisz określić, że używa mipmaps.

Wszystko co musisz zrobić, to przejść przez drugi parametr do konstruktora Texture jak ten:

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

można zobaczyć wszystkie Texture klasy konstruktorów w docs API tutaj: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Texture.html

+0

Dla osób używających 'AssetManager' można to osiągnąć, ustawiając' TextureParameter.genMipMaps' na true i przekazując ten parametr tekstury do 'AssetManager' przy ładowaniu tekstury: https://libgdx.badlogicgames.com/nightlies/docs/api/ com/badlogic/gdx/assets/loader/TextureLoader.TextureParameter.html # genMipMaps 'TextureLoader.TextureParameter textureParameter = new TextureLoader.TextureParameter(); textureParameter.genMipMaps = true; assetManager.load (textName, Texture.class, textureParameter); ', –