Box2dlights - 分层灯

时间:2014-07-30 21:45:59

标签: java libgdx box2d box2dlights

如何让box2dlights忽略环境光线下的纹理和精灵?例如,我有一个环境光线设置为暗的舞台。我希望我的灯能够直接在灯光下照亮一个平台,但灯光后面的背景图像应该保持黑暗而不亮。目前,灯光是顶部渲染图层,灯光下方的所有内容都会亮起。

1 个答案:

答案 0 :(得分:3)

实现这一目标的正确方法如下:

  1. 更新您的物理和相机。
  2. 渲染光照贴图,以便稍后从RayHandler的{​​{1}}获取纹理。
  3. 按所需顺序将顶层渲染为透明FrameBuffer对象,但不要在其中渲染光照贴图。不要在这里渲染您的HUD或任何您不希望受到照明影响的最顶层。
  4. 完成渲染到FrameBuffer并开始渲染到您的屏幕。
  5. 渲染不受灯光影响的背景。
  6. 绑定到FBO 0和1灯光地图和您的顶层“Texture Units FBO
  7. 开始Texture,您将使用该地图与Shader FBO混合。混合非常简单(发生在Texture):Fragment Shader,并保持glFragColor = tex0.rgb * tex1.rgb不变(tex1.a =光照贴图纹理,tex0 = fbo纹理) 。使用此渲染方法会丢失tex1的环境光,因此您可以将环境光颜色传递到着色器并将其添加到光照贴图通道。
  8. 将纹理单元绑定到着色器并执行渲染。必须在启用Alpha混合的情况下完成此渲染(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。
  9. 再次绑定默认RayHandler,以便正确完成剩余渲染(Texture Unit):渲染任何剩余的最顶层和HUD(如果有)。
  10. 一些示例代码:

    TEXTURE_0