OpenGL透明度无法正常工作

时间:2015-05-10 11:59:36

标签: opengl transparency alpha

我的项目透明度有问题。正如你所看到的,透明度对其他对象起作用很好 - 你可以看到树叶背后的犀牛,但问题在于树本身。当有两个分支,一个比另一个更近时,另一个分支不可见。与后备箱相同。透明度不适用于对象本身。

这是我在创建纹理时使用的代码:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

Image of my scene

1 个答案:

答案 0 :(得分:3)

虽然您生成的片段的颜色是透明的,但它们仍会写入深度缓冲区,因此树的某些三角形会遮挡其他三角形,尽管不会影响颜色缓冲区。

要正确渲染透明对象,您必须

  1. 首先绘制所有不透明对象
  2. 禁用深度缓冲区写入
  3. 对透明三角形进行排序
  4. 从后向前渲染透明三角形。
  5. 有一个技巧可以避免上述复杂性。如果你只有两个alpha值(零和一),那么你可以启用alpha test(glAlphaFunc)来完全丢弃透明片段。