簡體   English   中英

在 OpenGL 中設置透明背景顏色不起作用

[英]Setting transparent background color in OpenGL doesn't work

我嘗試使用函數 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。

編輯 :

結果我得到:

背景顏色為黑色且完全不透明

我試圖獲得的結果:

背景是透明的,下面的窗口是可見的

如果要啟用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);
.....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM