2012-12-16 120 views
1

我绘制了两个纹理,先是纹理A然后是纹理B.我总是出现A始终高于b,即使纹理A的某些部分是完全透明的,它只显示背景颜色屏幕。这里的背景颜色意味着我用glClearColor设置的颜色。然而,我改变了我的代码和图片,纹理的透明部分总是具有相同的背景颜色。无法使纹理透明

这是我的着色语言源代码。

precision mediump float; 
uniform sampler2D u_sampler; 
varying vec2 v_TexCoord; 
void main() { 
    gl_FragColor = texture2D(u_sampler, v_TexCoord); 
} 

而且我已经启用了混合功能。

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

回答

3

您是否正在使用2绘制调用进行渲染,或者您是否使用了多纹理。如果您将它作为2次绘制调用进行,则关闭深度测试,因为第二个纹理将始终不能进行深度测试(因为它不在多边形的前面,因此不会被绘制)。

如果你使用多纹理,那么你的问题可能在于你如何设置alpha。

我真的怀疑它是前者。

+0

您也可以将深度func从GL_LESS切换到GL_LEQUAL。然而,切换到多纹理看起来像比这更好的解决方案。 – Kos

+0

为什么我不能投两次票。这是答案。我已经考虑了两天,并且非常沮丧。你能给我一些建议,以防止再次发生这种情况。 (我已经阅读了相当多的日志文件)。 –

+1

科斯的想法是一个,但是你必须使用两个绘制调用的完全相同的顶点,否则浮点舍入错误会伤害你。通常使用多纹理是最好的计划。看到这里的教程:http://nehe.gamedev.net/tutorial/bump-mapping,_multi-texturing_&_extensions/16009/ – Goz