尽管设置了混合功能,OpenGl透明度仍无法正常工作

时间:2020-08-22 19:26:54

标签: c++

我正在尝试在OpenGl中获得一个半透明的红色矩形。问题是,无论设置什么透明度,我得到的都是一个不透明的红色矩形。我在窗口初始化后立即调用以下行:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glClearColor(0.f, 0.f, 0.f, 1.f);

我的着色器如下:

#version 330 core
out vec4 color;

void main() {
    color = vec4(1.0, 0.0, 0.0, 0.5);
}

我得到的结果:

Opaque red square

我期望的结果:

Transparent red triangle

以防万一有人认为我正在尝试巨魔之类的事情,只需将红色值设为0.5即可完成“期望”。它与透明度无关。

编辑:我使用该编辑破坏了该编辑(以下答案中的解决方案)

1 个答案:

答案 0 :(得分:0)

找到了解决方案。实际问题甚至与OpenGl无关。只是一个代码错误。我不知道,我以前是怎么想念它的,但这就是窗口初始化函数的外观:

window* createWindow(int width, int height, const char* title, const char* flags[], size_t fcnt) {
    return new window(width, height, title, flags, fcnt);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glClearColor(0.f, 0.f, 0.f, 1.f);
}

对于那些没有注意到的人:我正在尝试在return语句之后调用函数。

正确的功能是:

window* createWindow(int width, int height, const char* title, const char* flags[], size_t fcnt) {
    window* newwnd = new window(width, height, title, flags, fcnt);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glClearColor(0.f, 0.f, 0.f, 1.f);

    return newwnd;
}
相关问题