Android上的libGDX/box2dlight色带

Android上的libGDX/box2dlight色带,android,libgdx,render,light,box2dlights,Android,Libgdx,Render,Light,Box2dlights,我正在我的一个项目中使用Box2Lights。我在这个项目上工作了两个月,我只是试着把它移植到Android上,看看它看起来怎么样。 虽然灯光效果在桌面版的游戏中看起来很不错,但在安卓版上却很难看。灯光渐变一点也不平滑,带有色带效果。以下是桌面和android版本的屏幕截图: 要在游戏中使用Box2Lights,我在游戏屏幕中使用以下代码: RayHandler.useDiffuseLight(true); rayHandler = new RayHandler(world); rayHa

我正在我的一个项目中使用Box2Lights。我在这个项目上工作了两个月,我只是试着把它移植到Android上,看看它看起来怎么样。 虽然灯光效果在桌面版的游戏中看起来很不错,但在安卓版上却很难看。灯光渐变一点也不平滑,带有色带效果。以下是桌面和android版本的屏幕截图:

要在游戏中使用Box2Lights,我在游戏屏幕中使用以下代码:

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

我不知道这有什么帮助,但这里有其他精度:

  • 我的tileset是在Photoshop上制作的,并以RGB模式记录为PNG文件,8位/通道
  • 在我的两台Android设备上观察到了这种影响,它们是:
    • 使用Android 4.2.1的Tablet Transformer Prime TF701
    • 带安卓5.0.2的LG G Stylo
谢谢你的帮助

以下是解决方案:

这个问题与Android上的低位深度有关。 如果您查看的代码,您会注意到第30行和第31行的代码:

/** number of bits per color channel **/
public int r = 5, g = 6, b = 5, a = 0;
因此,默认情况下,带有libGDX的Android应用程序呈现低位图像。这可以在应用程序的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);
    }
}
要为Android应用程序提供RGBA8888的渲染格式,您只需执行以下操作:

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);
    }
}
瞧! 以下是Android RGB565与Android RGBA888与桌面的对比截图:

您可以看到Android RGBA8888非常接近桌面版本

public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new MyGdxGame(), config);
    }
}
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);
    }
}