gpt4 book ai didi

OpenGL 体素游戏 - 避免透明度重叠

转载 作者:行者123 更新时间:2023-12-04 02:18:24 24 4
gpt4 key购买 nike

我正在制作一个体素游戏,我将水设计为具有 0.5 alpha 的立方体。如果所有的水都在同一高度,效果很好,如下图所示:

Water at the same height

但是,如果水的高度不同,就会发生 alpha 重叠:

Alpha overlapping at different heights

如何防止这种重叠发生? (例如,只为每个像素绘制最近的水体,丢弃其余的)。我是否需要使用 FrameBuffers,通过多次传递绘制场景,或者使用备用混合函数或采用另一种 GPU 成本较低的方法就足够了吗?

最佳答案

我在没有多次绘制场景的情况下找到了答案。我希望它对某人有所帮助:

我们将为每个像素绘制最近的水体,丢弃剩余的,从而避免重叠。

  1. 首先,您正常绘制实心 block 。
  2. 然后,在颜色缓冲区 glColorMask(false,false,false,false) 中禁用写入后绘制水。 Z 缓冲区将根据需要更新,但还不会抽水。
  3. 最后,您启用在颜色缓冲区中写入 (glColorMask(true,true,true,true) ) 并将 depthFunc 设置为 LEQUAL (glDepthFunc(GL_LEQUAL) ) .只有最近的水像素才能通过深度测试(将其设置为 LEQUAL 而不是 EQUAL 会处理一些罕见但可能出现的浮点近似错误)。启用混合并再次绘制水将产生我们想要的效果:

enter image description here

关于OpenGL 体素游戏 - 避免透明度重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32642415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com