我在我的一个项目中使用Box2DLights。我在这个项目上工作了几个月,我只是尝试在Android上移植它,看它看起来如何。 虽然在桌面版游戏中光效看起来非常不错,但在Android版本上看起来真的很难看。光梯度根本不光滑,具有色带效果。以下是桌面和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);
我不知道这有什么帮助,但这里有其他精确性:
谢谢你的帮助!
答案 0 :(得分:0)
以下是解决方案:
问题与Android上的低位深度有关。 如果您查看AndroidApplicationConfiguration.java的代码,您会在第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);
}
}
Etvoilà! 这是Android RGB565 VS Android RGBA8888 VS桌面的比较截图:
您可以看到Android RGBA8888非常接近桌面版。