Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有alpha通道的纹理覆盖背景对象_C++_Opengl_Glsl - Fatal编程技术网

C++ 带有alpha通道的纹理覆盖背景对象

C++ 带有alpha通道的纹理覆盖背景对象,c++,opengl,glsl,C++,Opengl,Glsl,在我的引擎中实现billboard对象时,我遇到了一个问题(下面的屏幕截图) 正如你们所见,billboard对象覆盖了背景中的所有内容(skybox似乎是个例外)。这并不是我想要的工作方式。我不知道问题出在哪里 我的片段着色器非常简单: #version 330 uniform sampler2D tex; in vec2 TexCoord; out vec4 FragColor; void main() { FragColor = texture2D(tex, TexCoor

在我的引擎中实现billboard对象时,我遇到了一个问题(下面的屏幕截图)

正如你们所见,billboard对象覆盖了背景中的所有内容(skybox似乎是个例外)。这并不是我想要的工作方式。我不知道问题出在哪里

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

#version 330

uniform sampler2D tex;

in vec2 TexCoord;
out vec4 FragColor;

void main()
{
    FragColor = texture2D(tex, TexCoord);
}
广告牌只是用几何体着色器制作的三角形条


所有想法都很好。

可能是绘制顺序问题,您需要先绘制不透明对象,然后将alpha混合对象向后绘制到前面。或者,您可以启用alpha测试,或者在着色器中丢弃alpha低于特定阈值的片段。

尝试
如果(color.a==0.0)丢弃参考更多信息我使用了一个阈值想法
if(FragColor.a<0.9)丢弃而且似乎有效。老实说,这看起来不是一个很好的解决方案,但现在它比以前的检查效果更好