gpt4 book ai didi

c++ - OpenGL 混合 : texture on top overlaps its pixels which should be transparent (alpha = 0)

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:12 24 4
gpt4 key购买 nike

我正在绘制 map 纹理,并在其上绘制颜色条纹理。两者都有 alpha channel ,我正在使用混合,设置为

// Turn on blending
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

但是,会发生以下情况:

texture on top with alpha channel imposes its black pixels

带有 alpha channel 的顶部纹理(颜色条)强加了它的黑色像素,这是我不希望发生的。贴图纹理应该出现在颜色条 alpha = 0 的后面。

这与混合定义有关吗?我应该如何更改它?

最佳答案

假设纹理有一个 alpha channel 并且它在正确的地方是透明的,我怀疑问题出在渲染顺序和深度测试上。

假设您首先渲染比例纹理。它与黑色背景正确融合。然后渲染它后面的橙色纹理,但比例纹理的像素具有更高的深度值,导致那里的橙色纹理被丢弃。

因此,请确保按照从后到前或从远到近的顺序渲染所有透明内容。

在不考虑顺序独立透明度的情况下,实现 alpha 透明度的常用方法如下:

  1. 启用深度缓冲
  2. 渲染所有不透明的几何图形
  3. 禁用深度写入(glDepthMask)
  4. 启用 alpha 混合(如在 OP 的代码中)
  5. 以从远到近的顺序渲染透明几何体

对于粒子,有时您可以不进行排序就离开,但它看起来仍然没问题。另一种方法是使用 alpha 测试或使用 alpha 覆盖多样本帧缓冲区。

关于c++ - OpenGL 混合 : texture on top overlaps its pixels which should be transparent (alpha = 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31720323/

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