我正在尝试创建一个“雾中的洞”效果。我有一个背景网格图像,重叠在上面我有一个“雾”纹理,用于显示某些区域不在视图中。我正在尝试从“雾”中切出一大块,以显示当前可见的区域。我试图“掩盖”屏幕上的一部分雾。
我制作了一些图片来帮助解释我所追求的:
背景:
“蒙版图像”(完全透明必须在内部而不是外缘,因为我将使用它):
雾(抱歉,很难看到......大部分是透明的):
我想要的最终产品:
我试过了:
- Stencil-Buffer:除了一个事实外,我完全可以正常工作......我无法弄清楚如何保留“蒙版”图像的褪色透明度。
- glBlendFunc:我尝试了许多不同版本的参数和许多其他方法(glColorMask、glBlendEquation、glBlendFuncSeparate)我首先使用了我在这个网站上找到的一些参数:here。我使用了“glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);” 因为这似乎是我一直在寻找的但是......这就是最终发生的结果:(很难说这里发生了什么,但是......背景中有雾覆盖网格。虽然,当它应该是雾中的透明部分时,面具只是最终成为一个完全不透明的黑色斑点。
之前的一些代码:
glEnable(GL_BLEND); // This is not really called here... It is called on the init function of the program as it is needed all the way through the rendering cycle.
renderFogTexture(delta, 0.55f); // This renders the fog texture over the background the 0.55f is the transparency of the image.
glBlendFunc(GL_ZERO, GL11.GL_ONE_MINUS_SRC_ALPHA); // This is the one I tried from one of the many website I have been to today.
renderFogCircles(delta); // This just draws one (or more) of the mask images to remove the fog in key places.
(我会发布更多代码,但在我尝试了很多东西之后,我开始删除一些旧代码,因为它变得非常混乱(我在块评论中“支持它们”))