OpenGL透明度无法正常工作
我的项目透明度有问题。正如你所看到的,其他物体的透明度也很好——你可以看到树叶后面的犀牛,但问题是树本身。如果有两个分支,且其中一个分支比另一个分支更近,则另一个分支不可见。后备箱也一样。透明度只是不适用于对象本身 这是我在创建纹理时使用的代码:OpenGL透明度无法正常工作,opengl,transparency,alpha,Opengl,Transparency,Alpha,我的项目透明度有问题。正如你所看到的,其他物体的透明度也很好——你可以看到树叶后面的犀牛,但问题是树本身。如果有两个分支,且其中一个分支比另一个分支更近,则另一个分支不可见。后备箱也一样。透明度只是不适用于对象本身 这是我在创建纹理时使用的代码: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glGenTextures(1, &m_texture); glBindTexture(GL_TEX
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值(0和1)可以,则可以启用alpha测试(glAlphaFunc)以完全丢弃透明碎片。因此,我正在研究您建议的技巧,删除了混合,并在fragmnt着色器中添加了简单代码
If(color.a<0.5)discard;else gl_FragColor=颜色代码>这很有帮助。我现在唯一的问题是,在我的照明设置中,当对象由于照明而完全变黑时,碎片会被丢弃。@KarlosOtruba:这是不正确的。如果对象是不透明的黑色,那么它应该有color=vec4(0,0,0,1)
,如果你观察到其他东西,那么你的照明代码中一定有错误。谢谢你的解释!通过阅读您的评论,我发现了代码的问题。