2009-04-06 3 views
5

Следующий фрагмент рисует серый квадрат.Как установить непрозрачность вершины в 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(); 

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

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

+0

связанных http://stackoverflow.com/questions/1617370/opengl-alpha-transparency –

ответ

9

В функции инициализации, использовать эти две линии:

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

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

2

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

glBlendFunc(GL_SRC_ALPHA,GL_ONE); 
glColor4f(1.0f,1.0f,1.0f,0.5f); 
+0

Спасибо. Хм, похоже, не работает для меня, что я могу делать неправильно? –

2

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

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(); 
Смежные вопросы