2011-08-29 33 views
5

Trong OpenGL NỮA cũ, chúng ta có thể làm điều gì đó như thế này:ít màu hơn Vertices

glBegin(...); 
    glColor3f(r_1,g_1,b_1); 
    glVertex3f(x_1, y_1, z_1); 
    glVertex3f(x_2, y_2, z_2); 
    ... 
    glVertex3f(x_n, y_n, z_n); 

    glColor3f(r_2, g_2, b_2); 
    glVertex3f(x_(n+1), y_(n+1), z_(n+1)); 
    glVertex3f(x_(n+2), y_(n+2), z_(n+2)); 
    ... 
    glVertex3f(x_2n, y_2n, z_2n); 

    ... 
glEnd(); 

Đó là, tôi nói rằng mỗi n đỉnh liên tiếp chia sẻ cùng một màu sắc. Có thể thực hiện tương tự với OpenGL mới và không được chấp nhận không?

Ví dụ: nếu tôi có hình lập phương, điều đó có nghĩa là tôi có 36 đỉnh. Nếu tôi muốn mỗi khuôn mặt có 1 màu, thì mỗi 6 đỉnh liên tiếp phải chia sẻ màu đó. Hiện tại tôi đã sao chép một cách giả tạo dữ liệu màu 6 lần cho mỗi màu để các kích thước của mảng đỉnh và mảng màu giống nhau. Có cách nào khác xung quanh việc này không? Hy vọng câu hỏi của tôi là rõ ràng.

Trả lời

10

Có lẽ loại này giả xóa mọi thứ cho bạn:

GLfloat color_state{r,g,b}; 
GLfloat normal_state{x,y,z}; 
... 

glColor4f(r,g,b,a): 
    color_state.r = r 
    color_state.g = g 
    color_state.b = b 
    color_state.a = a 

glNormalf(x,y,z): 
    normal_state.x = x 
    normal_state.y = y 
    normal_state.z = z 

glVertex3f(x,y,z): 
    __glinternal_submit_vertex(
     position = {x,y,z}, 
     normal = normal_state, 
     color = color_state, 
     ...); 

Đây là cách OpenGL công trình ngay trong nội bộ. Màu sắc không được chia sẻ giữa các đỉnh. Bản sao được tạo từ trạng thái hiện tại cho mỗi đỉnh được gửi. Bây giờ, với Vertex Arrays và Vertex Buffer Object, gánh nặng nằm trên bạn, để thực hiện sao chép dữ liệu đúng.

+1

Ah, OK, tôi hiểu. Cám ơn bạn một lần nữa :) –

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