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

标签 java opengl libgdx

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

我想要的是环境是黑暗的,光线是白色的,但是将 spritebatch 颜色更改为较暗的颜色会导致光线变暗,即使我在绘制灯光纹理时重置颜色

这就是我想要的(通过强制光纹理绘制 5 次来做到这一点,但这不是解决方案,而是一个 hack): 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. 通过使用着色器。 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);
    

    最后在 render() 方法中进行所有渲染之后调用 rayHandler.updateAndRender();

关于java - LibGDX - 基本的 2D 光照,不知道该怎么做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45973258/

相关文章:

java - LWJGL OpenGL黑屏

c++ - 面向 OpenGL 2.0

java - Libgdx 中的 setCenter 在 nightlies 包中不可用,并且 setOrigin 无法正常工作?

java - LibGDX 触摸协调困惑

java - 如何在不使用 web.xml 的情况下配置 Jersey JSPTemplatePath

java - XOM 与 javax.xml.parsers

java - 以特定数字为增量生成双随机数

java - 使用 ObjectInputStream 从文件中读取对象?类未找到异常

python - 带索引的 pyOpenGL VBO

java - CatmullRomSplines 和其他平滑路径