OpenGL像素游戏-避免透明重叠

3
我正在制作一个像素游戏,我的水是由0.5 alpha的方块设计而成。如果所有的水面高度都相同的话,它可以完美工作,就像下面的图片一样: Water at the same height 但是,如果水面高度不同,就会出现alpha重叠的问题: Alpha overlapping at different heights 我该如何防止这种重叠发生?(例如,只绘制每个像素最近的水体,并丢弃其余部分)。我需要使用FrameBuffers,在多个通道上绘制场景,还是通过使用替代混合函数,或采用其他更少消耗GPU的方法就足够了呢?
1个回答

4
我找到了一种不需要多次绘制场景的答案,希望能对某些人有所帮助:
我们将为每个像素绘制最近的水体,并丢弃其余部分,从而避免重叠。
1. 首先,您正常绘制实心块。 2. 然后,在禁用颜色缓冲区写入glColorMask(false,false,false,false)后,绘制水。Z缓冲区将按预期更新,但尚未绘制水。 3. 最后,启用颜色缓冲区写入(glColorMask(true,true,true,true)),并将depthFunc设置为LEQUAL(glDepthFunc(GL_LEQUAL))。只有最近的水像素才能通过深度测试(将其设置为LEQUAL而不是EQUAL可以处理一些罕见但可能存在的浮点近似误差)。再次启用混合并绘制水将产生我们想要的效果: enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接