我的项目的透明度存在问题。正如您所看到的,透明度对于其他对象来说效果很好 - 您可以看到树叶后面的犀牛,但问题出在树本身。当有两个分支并且其中一个比另一个更近时,较远的一个是不可见的。与后备箱相同。透明度对对象本身不起作用。
这是我在创建纹理时使用的代码:
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);
尽管生成的片段的颜色是透明的,但它们仍然会写入深度缓冲区,以便树的某些三角形遮盖其他三角形,尽管不会影响颜色缓冲区。
要正确渲染透明对象,您必须
- 首先绘制所有不透明物体
- 禁用深度缓冲区写入
- 对透明三角形进行排序
- 从后到前渲染透明三角形。
不过,有一个技巧可以避免上述复杂性。如果您只接受两个 alpha 值(零和一),那么您可以启用 alpha 测试 (glAlphaFunc) 以完全丢弃透明片段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)