我正在尝试在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);
}
以防万一有人认为我正在尝试巨魔之类的事情,只需将红色值设为0.5即可完成“期望”。它与透明度无关。
编辑:我使用该编辑破坏了该编辑(以下答案中的解决方案)
答案 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;
}