2009-10-24 2 views
24

Вот мой код:Как использовать альфа-прозрачность в OpenGL?

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). Есть что-то, что я пропустил, чтобы включить альфа-прозрачность?

ответ

18

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

+5

Да, это было. Я должен был добавить: 'glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); glClearColor (0,0,0,0,0,0,0,0); ' , но только после glutCreateWindow() –

54

У вас есть glEnable'd alpha blending? И настроили ли вы свои параметры смешивания? Вы не можете просто установить альфу, необходимую для настройки других параметров в OpenGL.

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

OpenGL требует, чтобы все было включено. Хорошее место, чтобы начать искать. (Отключение и включение различных операций в разное время может привести к наиболее интересным эффектам.) – 2009-10-24 08:49:01

+0

Спасибо, я добавил их, но я забыл установить цвет фона –

+6

Это действительно полезно для новичков, спасибо ~ – neevek

Смежные вопросы