2010-03-04 7 views
6

Tôi đang cố gắng thêm một số trình đổ bóng vào chương trình OpenGL cũ của mình để vẽ nhiều GL_POINTS và một số GL_LINES.GLSL với trình đổ bóng phân đoạn chỉ hiển thị màu đen GL_POINTS

Tôi tạo ra hai shaders này:

Vertex Shader:

void main() 
{ 
    vec4 v = vec4(gl_Vertex); 
    v.z = v.z + sin(v.x*v.x + v.y*v.y)/10.0; 
    gl_Position = gl_ModelViewProjectionMatrix * v; 
} 

Fragment Shader:

#version 120 

void main() 
{ 
    vec4 myOutputColor = gl_Color; 
    gl_FragColor = myOutputColor; 
    //gl_FragColor.r = 0.5; 
} 

Hai shaders biên dịch và liên kết không có vấn đề. Và đổ bóng đỉnh hoạt động rất tốt, tôi có thể thấy GL_POINTS bị dịch chuyển bằng cách sử dụng tội lỗi đó trong bóng đổ đỉnh. Nhưng vấn đề là tôi chỉ có thể nhìn thấy GL_POINTS và GL_LINES của tôi nếu màu nền không phải là màu đen bởi vì tất cả các điểm và đường được hiển thị màu đen. Dường như tất cả các màu được đặt với glColor3f trong mã hiển thị đều bị bỏ qua. Nếu tôi bỏ ghi chú dòng nhận xét trong shader mảnh của tôi, tôi có thể làm cho tất cả các dòng và điểm màu đỏ, nhưng không nên gl_Color tương ứng với màu sắc đã được thiết lập với glColor3f cho mỗi điểm?

Có bất kỳ điều gì khác trong mã OpenGL của tôi có thể gây ra hành vi này không?

Trả lời

11

bạn cần chuyển màu thông qua trong trình đổ bóng đỉnh.

gl_FrontColor = gl_Color; 
+0

Cảm ơn! Hoạt động ngay bây giờ! Tôi không biết làm thế nào tôi bị mất một phần trong hướng dẫn .. :) – ivans

+1

Cũng thấy câu trả lời ở đây để biết thêm: http://stackoverflow.com/questions/6430154/what-is-the-relationship-between-gl- color-and-gl-frontcolor-in-cả-đỉnh-và-fr –