OpenGL:透明纹理问题

标签 opengl transparency blending

我在 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

如果还有什么需要的,尽管问,我会添加。

最佳答案

你必须做一个 Transparency Sorting

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

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

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

关于OpenGL:透明纹理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954668/

相关文章:

qt - 将 Qt 小部件捕获为图像文件

JAVA OpenGL - 缩放图像以适合窗口

java - 用于加载 PNG 图像的替代库

javascript - Three.js - EffectComposer - 混合场景闪烁

html - CSS3 - 不同 HTML 元素之间的混合模式

c - OpenGL - GLUT - 显示不同的弹出菜单

c++ - 使用 GLM 矩阵和 vector 乘法返回错误结果

javascript - IE 上的 Canvas 透明度

java - BufferedImage 具有透明背景的组件?

python - 在python中按最小值组合重叠栅格