【发布时间】: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.包括图片。
标签: c linux opengl glut blending