我试图在“雾中创建洞”效果。我有一个背景网格图像,叠加到我有一个“雾”纹理,我用它来显示某些区域不在视野内。我正试图从“雾”中剪下一块,以显示当前正在查看的区域。我试图“屏蔽”屏幕上的一部分雾。使用半透明纹理“掩盖”出背景的一部分
我做了一些图像,以帮助解释我是什么后:
背景:
“掩模图像”(全透明必须是在里面,而不是为了外缘什么我将用它来):
雾(对不起,很难看到..几乎透明):
我想,作为最终产品是什么:
我曾尝试:
- 模板缓冲液:我这只是一个事实完全工作..我无法弄清楚如何保留“蒙版”图像的褪色透明度。我试过很多不同版本的参数和许多其他方法(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.
(我会发布更多的代码但是在我尝试了很多东西之后,我开始删除一些旧代码,因为它变得非常混乱(我在块注释中将其备份)
如果您使用RGB混合方程(ONE_MINUS_DST_ALPHA,DST_ALPHA),并且正如您所说“alpha在我们想要看到雾的地方是0”,则结果颜色将为((1-0) * fog_rgb + 0 * dst_rgb)。这将使雾完全不透明,不是吗?在RGB计算中不需要使用雾层的Alpha值吗? – Tim
虽然我即将对此进行测试,但我相信颠倒面具可能对我无效。 renderFogCircles()渲染多个圆,它们可能重叠也可能不重叠。这会不会以alpha倒置的奇怪图形问题结束?无论如何...我会尽快测试以确保。 – Zachar543
目前的面具(但白色而不是黑色)似乎能够产生理想的效果。在上面的面具上反转alpha似乎给出了完全相反的效果。 (边框是透明的)尽管如此,仍然存在一些问题......无论我用什么透明度值,这段代码都有可能将所有的雾都变成不透明的白色。 http://img707.imageshack.us/img707/751/screenshot2012060615012.png(我用我在其他地方使用的参数撤消上面的glBlendFunc“glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);”)雾似乎不再与背景。 – Zachar543