我尝试使用函数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开发,如果有帮助的话。
编辑:
结果我得到了:
结果我试图获得:
发布于 2018-02-08 06:14:03
如果要启用混合,则必须启用混合(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);
.....
https://stackoverflow.com/questions/48675484
复制相似问题