Как установить непрозрачность вершины в OpenGL? - PullRequest
5 голосов
/ 06 апреля 2009

Следующий фрагмент рисует серый квадрат.

glColor3b(50, 50, 50);

glBegin(GL_QUADS);
glVertex3f(-1.0, +1.0, 0.0); // top left
glVertex3f(-1.0, -1.0, 0.0); // bottom left
glVertex3f(+1.0, -1.0, 0.0); // bottom right
glVertex3f(+1.0, +1.0, 0.0); // top right
glEnd();

В моем приложении за этим единственным квадратом находится цветной куб.

Какую функцию я должен использовать, чтобы сделать квадрат (и только этот квадрат) непрозрачным?

Ответы [ 4 ]

10 голосов
/ 06 апреля 2009

В функции init используйте следующие две строки:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

И в вашей функции рендеринга убедитесь, что вместо glColor3f используется glColor4f, и установите для 4-го аргумента необходимый уровень непрозрачности.

glColor4f(1.0, 1.0, 1.0, 0.5);

glBegin(GL_QUADS);
glVertex3f(-1.0, +1.0, 0.0); // top left
glVertex3f(-1.0, -1.0, 0.0); // bottom left
glVertex3f(+1.0, -1.0, 0.0); // bottom right
glVertex3f(+1.0, +1.0, 0.0); // top right
glEnd();
2 голосов
/ 06 апреля 2009

Используйте glColor4 вместо glColor3. Например:

glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(1.0f,1.0f,1.0f,0.5f);
2 голосов
/ 06 апреля 2009

Вы можете установить цвета для каждой вершины

glBegin(GL_QUADS);
glColor4f(1.0, 0.0, 0.0, 0.5); // red, 50% alpha
glVertex3f(-1.0, +1.0, 0.0); // top left
// Make sure to set the color back since the color state persists
glVertex3f(-1.0, -1.0, 0.0); // bottom left
glVertex3f(+1.0, -1.0, 0.0); // bottom right
glVertex3f(+1.0, +1.0, 0.0); // top right
glEnd();
2 голосов
/ 06 апреля 2009

glColor4f (float r, float g, float b, flaot alpha);
(в вашем случае может быть clColor4b)
также убедитесь, что смешивание включено.
(вам нужно сбросить цвет до не альфа-перехода, что может потребовать glGet * для сохранения старого цвета вершин)

...