在 OpenGL 中设置透明背景颜色不起作用
Posted
技术标签:
【中文标题】在 OpenGL 中设置透明背景颜色不起作用【英文标题】:Setting transparent background color in OpenGL doesn't work 【发布时间】:2018-02-08 00:18:41 【问题描述】:我尝试使用函数 glClearColor() 和 glClear() 将背景颜色设置为透明颜色。但是,传递给 glClearColor() 的 alpha 值根本不会改变任何东西。
这是我尝试运行的代码:
#include<GL/glut.h>
void display()
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(float)glutGet(GLUT_WINDOW_WIDTH),0.0,(float)glutGet(GLUT_WINDOW_HEIGHT));
glBegin(GL_LINES);
glVertex2i(200,200);
glVertex2i(300,305);
glEnd();
glFlush();
int main(int argc, char *argv[const])
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_ALPHA);
glutInitWindowSize(1100,620);
glutInitWindowPosition((glutGet(GLUT_SCREEN_WIDTH)-1100)/2,(glutGet(GLUT_SCREEN_HEIGHT)-620)/2);
glutCreateWindow("GLUT Programming");
glClearColor(0.0f,0.0f,0.0f,0.5f); // I have tried experimenting with this part, but, nothing happens
glutDisplayFunc(display);
glutMainLoop();
如果有帮助,我正在运行 Fedora 26 的机器上使用 freeglut 和 freeglut-devel。
编辑:
我得到的结果:
我试图获得的结果:
【问题讨论】:
我从未见过它工作。您的 glut 实现很有可能不会加点它,这往往不是一个常见的用例。你可能想看看这个:gist.github.com/je-so/903479/… 直接通过 xlib 完成。 你在看什么?你期望看到什么? (这种情况适合发图) 您期待什么结果? alpha 值 != 1 的背景只有在您启用混合并使用需要目标 alpha 值的混合功能时才会产生影响。还是你想让窗口透明? @rioki 链接中提供的代码确实有效。但是,仅使用 OpenGL 就不可能做到这一点吗?另外,只是出于好奇,如何使窗口完全透明,包括标题栏? (windows 有一个实现,但是,对于 linux 呢?) @n.m.包括图片。 【参考方案1】:如果要启用Blending,则必须启用混合(glEnable( GL_BLEND )
)并且必须设置混合功能(glBlendFunc
)。
此外,您必须设置用于绘制几何图形的颜色的 Alpha 通道 (glColor4f
)
以某种方式更改您的代码:
glClearColor( 0.5f, 0.5f, 0.5f, 1.0f ); // background color
glClear(GL_COLOR_BUFFER_BIT); // clear background with background color
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); // = color * alpha + background * (1-alpha)
glColor4f( 1.0f, 0.0f, 0.0f, 0.1f ); // color of the line, alpha channel 0.1 (very "transparent")
glLineWidth( 5.0 );
glBegin(GL_LINES);
.....
【讨论】:
修改后的代码使线条变得透明。我想对背景做同样的事情。更改代码第一行中的 alpha 值没有任何区别。我想用它来渲染透明背景。 @Enqueue 好的,我明白了。但这不会像那样工作。查看您的问题的 cmets。以上是关于在 OpenGL 中设置透明背景颜色不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NavigationView 中设置列表的背景颜色