2016-04-02 3 views
0

Я использую Box2DLights в одном из моих проектов. Я работал над этим проектом уже пару месяцев, и я просто попытался его портировать на Android, чтобы посмотреть, как он выглядит. В то время как световой эффект выглядит очень хорошо на настольной версии игры, он выглядит действительно уродливым по версии Android. Легкий градиент не является гладким, с эффектом цветокоррекции. Вот скриншоты рабочего стола и андроид версии: enter image description herelibGDX/Box2DLights Color Banding на Android

Чтобы использовать Box2DLights в моей игре, я использую этот код в моем GameScreen:

RayHandler.useDiffuseLight(true); 
rayHandler = new RayHandler(world); 
rayHandler.resizeFBO(Gdx.graphics.getWidth()/5, Gdx.graphics.getHeight()/5); 
rayHandler.setBlur(true); 
rayHandler.setAmbientLight(new Color(0.15f, 0.15f, 0.15f, 0.1f)); 

Я также попытался играть с различными параметрами, такими как:

rayHandler.diffuseBlendFunc.set(GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); 

Или

rayHandler.shadowBlendFunc.set(GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); 

Или

Gdx.gl.glEnable(GL20.GL_DITHER); 

Я не знаю, что помогает, но вот другие уточнения:

  • Мой Tileset был сделан на Photoshop и записанные в виде PNG-файла с режимом RGB, 8 бит/канал
  • Этот эффект наблюдался на моих 2 Android устройств, которые:
    • Tablet Transformer Prime TF701 с Android 4.2.1
    • LG G Stylo с Android 5.0.2

Спасибо вам помочь!

ответ

0

Вот решение:

Проблема была связана с низкой битовой глубиной на Android. Если вы посмотрите на код AndroidApplicationConfiguration.java, вы заметите, в строках 30 и 31 этот код:

/** number of bits per color channel **/ 
public int r = 5, g = 6, b = 5, a = 0; 

Таким образом, Android приложений с libGDX рендеринга, по умолчанию, низких битовых изображений. Это можно легко изменить в AndroidLauncher.java вашего приложения.

по умолчанию AndroidLauncher.java вашего приложения выглядит следующим образом:

public class AndroidLauncher extends AndroidApplication { 
    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
     initialize(new MyGdxGame(), config); 
    } 
} 

Все, что вам нужно сделать, чтобы иметь рендеринг формат RGBA8888 для Android приложения является:

public class AndroidLauncher extends AndroidApplication { 
    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
     config.r = 8; 
     config.g = 8; 
     config.b = 8; 
     config.a = 8; 
     initialize(new MyGdxGame(), config); 
    } 
} 

Et вуаля! Вот сравнительный скриншот Android RGB565 VS Android RGBA8888 VS Desktop: enter image description here

Вы можете видеть, что Android RGBA8888 очень близко к настольной версии.