OpenGL:透明纹理问题

3
我在OpenGL中遇到了纹理透明的问题。如下图所示,效果并不理想。值得注意的是,黑色实际上是我用来清除屏幕的ClearColor。

enter image description here

我使用以下代码实现混合:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

这是我的片段着色器:

#version 330 core

in vec2 tex_coords;

out vec4 color;

uniform vec4 spritecolor;
uniform sampler2D image;

void main(void)
{
    color = spritecolor * texture(image, tex_coords);
}

这是一个线框模式下的场景截图,如果有助于绘制顶点,请参考:

Scene in Wireframe mode

如果需要其他任何东西,请随时提出,我会添加它。
1个回答

6

您需要执行透明度排序

如果绘制场景,则通常会将深度测试(glDepthFunc)设置为GL_LESS。这会导致仅在它们在已绘制的场景前面时才绘制片段。

要正确绘制透明对象,必须先绘制不透明对象。然后按相机位置的反向距离排序绘制透明对象。
首先绘制距离相机位置最远的透明对象,最后绘制距离相机位置最近的透明对象。

另请参阅以下问题的答案:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接