LibGDX - 基本的2D照明,不知道该怎么做
问题描述:
这是我第一次尝试创建一个基本的灯光系统,在顶部使用一个带有白色圆圈的黑色纹理。我读了关于这个问题的各种线索,但我只是不知道我做错了什么。LibGDX - 基本的2D照明,不知道该怎么做
我要的是周围是黑暗和光线很好白色,但改变spritebatch颜色的东西较深将导致光线更暗,即使我重新绘制质地轻
当颜色所以这就是我想要的(通过强制质地轻取出5次这样做,但不是一个解决方案,这是一个黑客):
主要代码:
Game.sb.begin();
//Make stuff darker
Game.sb.setColor(0.1f, 0.1f, 0.1f,1f);
sb.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
lvl.render();
//Reset color
Game.sb.setColor(1f, 1f, 1f,1f);
sb.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
//This draws all lights by drawing a texture with the above blending function
lightM.render();
Game.sb.end();
灯光对象绘制方法:
Game.sb.setColor(c.r,c.b,c.g, 1f);
Utils.drawTexture(Assets.get("sprites/lightcircle2.png", Texture.class), pos, size, true);
Game.sb.setColor(1,1,1,1);
我是不是做了某种错误与为setColor?使用帧缓冲我一直在考虑,但我不知道这是否会给我光效果我想
顺便说一句,这是我的质地轻(它的CC0):
答
可以实现您的需求通过以下方式:
通过使用FBO和混合,Here是我对这个主题的答案之一。
-
您可以在
render()
方法使用box2dlight,即使不使用box2dbody(如果你不希望任何阴影)
所有的渲染后World world = new World(new Vector2(0,0),false); RayHandler rayHandler = new RayHandler(world); rayHandler.setCombinedMatrix(stage.getCamera().combined); //<-- pass your camera combined matrix new PointLight(rayHandler,1000, Color.WHITE,radius,x_position,y_position);
而在最后一次通话
rayHandler.updateAndRender();
。
我会尝试使用FBO和混合,GLSL似乎很复杂,我不想使用box2dlights。谢谢! :d –