LibGDX - 基本的2D照明,不知道该怎么做

时间:2017-08-31 04:29:24

标签: java opengl libgdx

这是我第一次尝试创建一个使用黑色纹理,顶部有白色圆圈的基本灯光系统。我阅读了关于这个问题的各种线索,但我不知道我做错了什么。

我想要的是环境是黑暗的,而光线是白色的,但是如果我在绘制光线纹理时重置颜色,那么将spamabatch颜色更改为更暗的颜色会导致光更暗甚至

所以这就是我想要的(通过强制轻微纹理绘制5次,但这不是解决方案,这是一个黑客): what I get if I draw the light 5 times while darkening the screen

这是我得到的(只绘制了1个浅色纹理,但不是很明显): what I get while darkening the spritebatch and resetting the color to draw the light

这是我得到的,不会使spritebatch变暗: what I get by drawing the light without darkening the spritebatch

主要代码:

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

我是否在设置颜色时犯了一些错误?我一直在考虑使用FrameBuffer,但我不确定它是否会给我我想要的光效

顺便说一下,这是我的质地(它的CC0):

lighttexture

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式达到您的要求:

  1. 使用着色器。 Here是一段小视频,并且该视频为article

  2. 通过使用FBO和混合,Here是我对此主题的回答之一。

  3. 您可以使用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();方法完成所有渲染后,最后致电render()