Как использовать альфа-прозрачность в OpenGL? - PullRequest
25 голосов
/ 24 октября 2009

Вот мой код:

void display(void);

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable( GL_BLEND );
    glutInitWindowSize(600,600);
    glutInitWindowPosition(200,50);
    glutCreateWindow("glut test");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPointSize(8);
    glBegin(GL_POINTS);
    glColor4f(.23,.78,.32,1.0);
    glVertex2f(0,0);
    glColor4f(.23,.78,.32,0.1);
    glVertex2f(0.1,0);
    glEnd();
    glFlush();
}

Проблема в том, что эти две точки выглядят одинаково (даже когда я устанавливаю альфа в 0). Я что-то пропустил, чтобы включить альфа-прозрачность?

Ответы [ 2 ]

59 голосов
/ 24 октября 2009

у вас есть блестящее альфа-смешение? И вы установили параметры смешивания? Вы не можете просто установить альфу, необходимую для настройки различных других параметров в OpenGL.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable( GL_BLEND );
18 голосов
/ 24 октября 2009

Просто предположение, но может ли быть так, что у вас нет цвета фона? Итак, при рендеринге второй вершины, которая имеет альфа 0,1, нет фона для вычисления правильного цвета? Просто думаю, прошло много лет с тех пор, как я использовал opengl.

...