OpenGL:透明纹理问题

APr*_*mer 3 opengl transparency blending

我在 OpenGL 中遇到纹理透明度问题。正如您在下图中看到的,它不太有效。值得注意的是,黑色实际上是 ClearColor,我用来清除屏幕。

在此输入图像描述

我使用以下代码来实现混合:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

这是我的片段着色器:

#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);
}
Run Code Online (Sandbox Code Playgroud)

这是线框模式下场景的屏幕截图,以防它有助于绘制顶点:

线框模式下的场景

如果还有什么需要的,可以问我,我会补充的。

Rab*_*d76 6

您必须进行透明度排序

如果绘制场景,通常将深度测试 ( glDepthFunc) 设置为GL_LESS。这会导致仅当片段位于目前绘制的场景前面时才绘制片段。

要正确绘制透明物体,必须先绘制不透明物体。必须在之后绘制透明对象,并按与相机位置的相反距离排序。要正确绘制透明对象,必须先绘制不透明对象。透明物体必须在之后绘制,并按到相机位置的反向距离排序。
首先绘制距相机位置距离最大的透明物体,最后绘制距相机位置距离最近的透明物体。

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