То, что вы ищете, это массивы вершин. Как это работает, каждый объект содержит массив вершин и цвет. Нормы для вершин хранятся в этом же массиве (vertexX, vertexY, vertexZ, normalX, normalY, normalZ). Когда вы хотите визуализировать ваши объекты, вы просматриваете массив объектов и визуализируете каждый объект, как показано ниже:
float plane[] = {
10, 10, 0, 0, 0, 1,
-10, 10, 0, 0, 0, 1,
-10, -10, 0, 0, 0, 1,
10, 10, 0, 0, 0, 1,
-10, 10, 0, 0, 0, 1,
10, -10, 0, 0, 0, 1,
};
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(plane[0])*6, &plane[0]);
glNormalPointer(3, GL_FLOAT, sizeof(plane[0])*6, &plane[3]);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glDrawArrays(GL_TRIANGLES, 0, (sizeof(plane) / sizeof(plane[0]))/6);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
И это должно нарисовать красную плоскость. Разница лишь в том, что вы захотите скорректировать свой массив из определения вашего объекта. Вы также можете включить информацию о цвете для каждой вершины и просто включить glColorPointer в коде выше и glEnableClientState (GL_COLOR_ARRAY).