android & libgdx - отключить размытый рендеринг - PullRequest
5 голосов
/ 24 марта 2012

Я опробовал 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 для galaxy nexus, из-за панели кнопок), и я 'Поместите это на фоне приложения libgdx.конечно, мне пришлось добавить дополнительное пустое пространство для загрузки текста, поэтому окончательный размер изображения (который будет включать содержимое и пустое пространство) все еще является степенью 2 как для ширины, так и для высоты (1024x2048 в этомдело) .в настольном приложении это выглядит нормально.на устройстве это выглядело размытым.

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

конечно, 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);
  }

Ответы [ 3 ]

2 голосов
/ 30 апреля 2012

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

TextureRegion.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
0 голосов
/ 16 декабря 2013

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

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

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

0 голосов
/ 03 июня 2013

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

...