Как установить непрозрачность вершины в OpenGL?

В следующем фрагменте показан серый квадрат.

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();

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

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


person Nick Bolton    schedule 06.04.2009    source источник
comment
связанные stackoverflow.com/questions/1617370/opengl-alpha-transparency   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.04.2016


Ответы (4)


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

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

И в вашей функции рендеринга убедитесь, что glColor4f используется вместо glColor3f, и установите 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();
person Nick Bolton    schedule 06.04.2009
comment
Спасение жизней даже спустя 11 лет. - person Countour-Integral; 07.12.2020

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

person qwerty    schedule 06.04.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();
person basszero    schedule 06.04.2009

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

glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(1.0f,1.0f,1.0f,0.5f);
person DNS    schedule 06.04.2009
comment
Спасибо. Хм, похоже, у меня не работает, что я делаю не так? - person Nick Bolton; 06.04.2009