2009-10-24 22 views
24

Dưới đây là mã của tôi:Làm cách nào để sử dụng tính trong suốt của alpha trong 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(); 
} 

Vấn đề là hai điểm này xuất hiện giống hệt nhau (ngay cả khi tôi đặt alpha 0). Có điều gì tôi đã bỏ lỡ để bật tính minh bạch alpha không?

Trả lời

18

Chỉ cần đoán, nhưng có thể bạn không có màu nền? Vì vậy, khi rendering của bạn các đỉnh thứ hai có alpha 0,1, không có nền để tính toán màu sắc thích hợp? Chỉ cần đoán, đã nhiều năm kể từ khi tôi sử dụng opengl.

+5

Vâng, đây là nó. Tôi nên thêm: 'glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); glClearColor (0,0,0,0,0,0,0,0); ' nhưng chỉ sau glutCreateWindow() –

54

bạn có trộn glEnable'd alpha không? Và bạn đã thiết lập các tham số hòa trộn của mình chưa? Bạn không thể chỉ thiết lập alpha bạn cần thiết lập các thông số khác trong OpenGL.

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

OpenGL yêu cầu mọi thứ phải được bật. Một nơi tốt để bắt đầu tìm kiếm. (Vô hiệu hóa và kích hoạt các hoạt động khác nhau tại các thời điểm khác nhau có thể dẫn đến các hiệu ứng thú vị nhất.) –

+0

Cảm ơn, tôi đã thêm chúng, nhưng tôi quên đặt màu nền –

+6

Điều này thực sự hữu ích cho người mới bắt đầu, Cảm ơn bạn ~ – neevek

Các vấn đề liên quan