Нет лучшей практики. Все зависит от приложения, которое разрабатывается.
Для игры визуализатора нет никакой необходимости хранить вершины как в RAM и VRAM , это означает , что вам нужно держать только ВБО идентификатор. Исключением является местность, где вам нужно иметь доступ к позициям из-за высоты размещения / столкновения игроков.
Вам нужно объединить все данные вершин? Если вы хотите иметь несколько цветов для одних и тех же вершин, например, разные цвета для одних и тех же моделей игроков, то объединение всего может создать небольшое препятствие для развития.
Вы получаете доступ к данным вне класса? Если нет, вы получите только больше кода, чем vertices->position[i]
вместо positions[i]
. В конструкторе игр / моделей вам нужен доступ к ним извне, но вы не получаете доступ ко всем данным одновременно, когда вы моделируете, затем вы получаете доступ к позициям, а когда вы красите, вы получаете доступ к цветам.
Единственное, что я бы собрал - это xyz
( rgb
) значения в одну структуру для более приятного кода:
Vector3 {
GLfloat x,y,z;
};
Color3 {
GLbyte r,g,b;
};
Изменить: Я хотел бы добавить, что некоторые люди используют unions
для упрощения glVertex * 3v, glVertex * 4v, glUniform * v ... вызова, где массив передается вместо отдельных переменных:
union Vector3f {
GLfloat v[3];
struct {
GLfloat x,y,z;
};
};
union Color3b {
GLbyte c[3];
struct {
GLbyte r,g,b;
};
};