Меньше цветов, чем вершин - PullRequest
5 голосов
/ 29 августа 2011

В старом устаревшем 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 раз искусственно копировал данные о цвете для каждого цвета, чтобы размеры массивов вершин и массивов цветов были одинаковыми.Есть ли другой способ обойти это?Надеюсь, мой вопрос был ясен.

1 Ответ

10 голосов
/ 29 августа 2011

Может быть, этот псевдокод прояснит для вас:

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 немедленное работает внутри. Цвета не были разделены между вершинами. Копия была создана из текущего состояния для каждой представленной вершины. Теперь с Vertex Arrays и Vertex Buffer Object бремя лежит на вас, чтобы сделать правильное дублирование данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...