如何让box2dlights忽略环境光线下的纹理和精灵?例如,我有一个环境光线设置为暗的舞台。我希望我的灯能够直接在灯光下照亮一个平台,但灯光后面的背景图像应该保持黑暗而不亮。目前,灯光是顶部渲染图层,灯光下方的所有内容都会亮起。
答案 0 :(得分:3)
实现这一目标的正确方法如下:
RayHandler
的{{1}}获取纹理。FrameBuffer
对象,但不要在其中渲染光照贴图。不要在这里渲染您的HUD或任何您不希望受到照明影响的最顶层。FrameBuffer
并开始渲染到您的屏幕。FBO
0和1灯光地图和您的顶层“Texture Units
FBO
。Texture
,您将使用该地图与Shader
FBO
混合。混合非常简单(发生在Texture
):Fragment Shader
,并保持glFragColor = tex0.rgb * tex1.rgb
不变(tex1.a
=光照贴图纹理,tex0
= fbo纹理) 。使用此渲染方法会丢失tex1
的环境光,因此您可以将环境光颜色传递到着色器并将其添加到光照贴图通道。RayHandler
,以便正确完成剩余渲染(Texture Unit
):渲染任何剩余的最顶层和HUD(如果有)。一些示例代码:
TEXTURE_0