这是我第一次尝试创建一个基本的灯光系统,该系统使用顶部有白色圆圈的黑色纹理。我阅读了有关该问题的各种帖子,但我只是不知道我做错了什么。
我想要的是环境是黑暗的,光线是白色的,但是将 spritebatch 颜色更改为较暗的颜色会导致光线变暗,即使我在绘制灯光纹理时重置颜色
这就是我想要的(通过强制光纹理绘制 5 次来做到这一点,但这不是解决方案,而是一个 hack):
这就是我得到的结果(仅绘制了 1 个浅色纹理,但不是很明显):
这是我在不使 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):
最佳答案
您可以通过以下方式实现您的要求:
通过使用 FBO 和混合,Here这是我对此主题的回答之一。
您可以使用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);
最后在
render()
方法中进行所有渲染之后调用rayHandler.updateAndRender();
。
关于java - LibGDX - 基本的 2D 光照,不知道该怎么做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45973258/