2013-04-14 64 views
1

在实施广告牌对象,以我的引擎我遇到一个问题(下图)纹理的alpha通道覆盖背景对象

enter image description here

,你可以看到广告牌的对象涵盖了后台的一切(天空盒似乎是一个例外)。而且这并不是我想要的工作方式。我不知道问题在哪里。

我的片段着色器是非常简单的:

#version 330 

uniform sampler2D tex; 

in vec2 TexCoord; 
out vec4 FragColor; 

void main() 
{ 
    FragColor = texture2D(tex, TexCoord); 
} 

和广告牌是在几何着色器只是做三角形带。

所有想法都不错。

+0

尝试'if(color.a == 0.0)discard;'参考http://en.wikibooks.org/wiki/GLSL_Programming/GLUT/Transparent_Textures以获得更多信息 –

+0

我使用了一个阈值构思if(FragColor.a <0.9)丢弃;'它似乎工作。说实话,它看起来并不是很好的解决方案,但现在它比以前更好用 –

+0

检查[“混合可以用来使对象看起来透明,但是单独混合是不够的,有很多步骤你必须采取措施使透明度发挥作用......“](http://www.opengl.org/wiki/Transparency_Sorting) –

回答

2

可能会画出顺序问题,您需要首先绘制不透明物体,然后再将alpha混合物体绘制回前面。或者,您可以启用alpha测试,或者在着色器丢弃片段(如果它们的alpha低于某个阈值)。