2011-08-29 229 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

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