Android & libgdx – отключить размытую визуализацию

Я пытаюсь использовать libgdx как оболочку opengl, и у меня есть некоторые проблемы с его графическим рендерингом: по какой-то причине все изображения (текстуры) на устройстве Android выглядят немного размытыми с использованием libgdx. Это также включает текст (шрифт).

Для текста я думал, что это потому, что я использую растровые шрифты, но я не могу найти альтернативу. Я узнал, что есть библиотека под названием «gdx-stb-truetype», но я не могу найти, как Скачать его и использовать.

Для обычных изображений, даже когда я показываю все изображение без какого-либо масштабирования, я ожидаю, что он будет выглядеть таким же резким, как я вижу его на экране компьютера, особенно если у меня такой хороший экран на устройстве (это галактика nexus). Я попытался отключить сглаживание, используя следующий код:

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

Я также попытался установить метод масштабирования на различные методы, но не повезло. пример:

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

Как тест, я нашел резкое изображение, которое точно такое же, как и разрешение на устройстве (720×1184 для галактики nexus из-за панели кнопок), и я поставил его на фоне libgdx Приложение. Конечно, я должен был добавить дополнительное пустое пространство для загрузки текста, поэтому конечный размер изображения (который будет содержать контент и пустое пространство) по-прежнему имеет мощность 2 для ширины и высоты (1024×2048 в этом дело) . На рабочем столе это выглядит нормально. На устройстве он выглядел размытым.

Странная вещь, которую я заметил, заключается в том, что когда я меняю ориентацию устройства (горизонтальный <=> вертикальный), за очень короткое время до начала вращающейся анимации я очень хорошо вижу изображение и текст.

Конечно, libgdx может справиться с этим, так как часть opengl проекта api-тестов android показывает изображения просто отлично.

Кто-нибудь может мне помочь, пожалуйста?

@ 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); } с 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); } с 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); } 

Попробуй это:

 TextureRegion.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); 

Если у вас есть приложение Chainfire 3D или другое, которое уменьшает текстуры или меняет их на 16 бит, выключите его; Это работает для меня, и у меня была та же проблема.

Попробуйте следующее:

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

Существует несколько типов TextureFilters. Я предполагаю, что линейный (это значение по умолчанию?) Размывается.

Intereting Posts
Жизненный цикл Службы, который запущен и связан? Получение фотографии из контакта Как центрировать макет вертикально в андроиде через java-код? Отличить салфетки и щелкнуть в android (передать событие в другое представление, если это проведите) Зачем показывать ошибку непредвиденного префикса пространства имен xmlns в android? Наблюдаемые дополнения пакета id, addon-google_apis-google-19 'в несовместимом месте Как добавить PDFBox в проект Android или предложить альтернативу Широковещательная передача, если устройство Bluetooth подключается / отключается? Выбор видов, таких как панель оценки Получить значение edittext из фрагмента Карта Google не отображается в Android Как оживить добавление вида в Android? Случай использования Android SyncAdapter Получение контактного ID из базы данных контактов Android не работает должным образом Android: проверьте, работает ли моя служба в фоновом режиме