2011-08-29 414 views
5

在舊的過時的OpenGL的,我們可以做這樣的事情:較少的顏色比頂點

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(); 

也就是說,我是說,每個n個連續的頂點共享相同的顏色。使用新的和不推薦使用的OpenGL可以做到這一點嗎?

例如,如果我有一個立方體,這意味着我有36個頂點。如果我想讓每個面都有1種顏色,則每個連續的6個頂點必須共享該顏色。目前,我已經爲每種顏色人爲地複製了6次顏色數據,以便頂點數組和顏色數組的大小相同。有沒有其他解決方法?希望我的問題很清楚。

回答

10

也許這種僞代碼的清除東西給你:

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, 
     ...); 

這是怎樣的OpenGL立即作品內部。顏色不在頂點之間共享。從當前狀態爲每個提交的頂點創建副本。現在,使用頂點數組和頂點緩衝區對象負擔很重,要做正確的數據複製。

+1

啊,好的,我明白了。再次感謝你 :) –