较少的颜色比顶点
问题描述:
在旧的过时的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次颜色数据,以便顶点数组和颜色数组的大小相同。有没有其他解决方法?希望我的问题很清楚。
答
也许这种伪代码的清除东西给你:
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立即作品内部。颜色不在顶点之间共享。从当前状态为每个提交的顶点创建副本。现在,使用顶点数组和顶点缓冲区对象负担很重,要做正确的数据复制。
啊,好的,我明白了。再次感谢你 :) –