我正在做一个体素游戏,我已经设计了0.5阿尔法的水立方体。如果所有的水都在相同的高度上,就像下面的图片所示:

但是,如果水不在同一高度,就会发生α重叠:

如何防止这种重叠的发生?(例如,只为每个像素绘制最近的水体,丢弃其余的)。我是否需要使用FrameBuffers,用多次传递来绘制场景,或者使用交替的混合函数,或者采用另一种更便宜的GPU方法就足够了?
发布于 2015-09-18 16:17:56
我找到了一个答案,但没有用多张通行证画出现场。我希望它能帮助到一些人:
我们将为每个像素绘制最近的水体,丢弃剩余的,从而避免重叠。
glColorMask(false,false,false,false)中写入后绘制水。Z-缓冲区将按需要更新,但尚未提取水。glColorMask(true,true,true,true) )中的写入,并将depthFunc设置为LEQUAL ( glDepthFunc(GL_LEQUAL) )。只有最近的水像素才能通过深度测试(将其设置为LEQUAL,而不是处理一些罕见但可能的浮点近似错误)。重新使水混合和抽水将产生我们想要的效果:

https://stackoverflow.com/questions/32642415
复制相似问题