2012-07-21 44 views
14

Tôi làm cách nào để tạo một đường kẻ (có thể tô màu) với trình đổ bóng? Tôi đang sử dụng đường ống lập trình và tôi là người mới bắt đầu với OpenGL. Tôi không thể tìm thấy một ví dụ về làm thế nào để vẽ đường với shaders .. Tôi cho rằng tôi phải tải một VAO (đỉnh mảng đối tượng) vào bóng đổ, nhưng sau đó những gì? Tôi nên sử dụng những chức năng nào và làm thế nào?openGL: đường kẻ có bóng đổ

+0

Bạn có biết cách vẽ hình tam giác không? Nó thực sự không khác nhau, bạn chỉ cần chỉ định GL_LINES thay vì GL_TRIANGLES để glDrawArrays/glDrawElements – Tim

+0

bất kỳ mã ví dụ nào? –

Trả lời

9

Trước tiên, hãy đặt sử dụng chương trình shader. Sau đó vẽ các đường bằng cách sử dụng glDrawArrays (hoặc Phần tử nếu dữ liệu của bạn được lập chỉ mục) với chế độ = GL_LINES hoặc một trong các chế độ vẽ đường khác.

Dưới đây là ví dụ về mã cho các dòng 2D có màu khác nhau ở mỗi đầu. Nếu chế độ tô bóng được đặt là mượt mà, OpenGL sẽ nội suy các màu dọc theo đường kẻ.

struct LineSegment_t 
{ 
    float x1, y1; 
    float r1,g1,b1,a1; 
    float x2, y2; 
    float r2,g2,b2,a2; 
}; 

int num_verts = lines.size()*2; 
glBindVertexArray(line_vao); // setup for the layout of LineSegment_t 
glBindBuffer(GL_ARRAY_BUFFER, LineBufferObject); 
glBufferData(GL_ARRAY_BUFFER, sizeof(LineSegment_t)/2 * num_verts, &lines[0], GL_DYNAMIC_DRAW); 
glDrawArrays(GL_LINES, 0, num_verts); 

Nếu bạn cần linh hoạt hơn, bạn có thể vẽ đường bằng hình tam giác bằng cách tạo hình chữ nhật (4 điểm) từ điểm cuối dòng. Trong 2D, bạn có thể tạo 4 điểm bằng cách dịch các điểm cuối bằng cách sử dụng đường thẳng/vuông góc (-y, x) theo dòng mong muốn bằng. Trong 3D, bạn cần đảm bảo các hình tam giác được căn chỉnh với máy ảnh như trong bảng.

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