Не совсем понимаю что такое shared/unshared.
Если полигоны используют (шарят) одни и те же индексы вертексов - то это shared (кубик
. Если же используются разные индексы (для совпадающих позиций) - это unshared (кубик 24).
Я бы взял структуру наподобии
struct MyVertex
{
int count; //Число вершин в точке
int* glVertexesId; //Номера этих вершин
//double x, y, z;
};
Создал бы вектор таких структур, который бы полностью описал бы "человеческие" вершины.
Для каждой вершины GL записал бы номер, соответствующий номеру "человеческой" вершины в этом векторе.
Получается, что пользователь выбирает gl вершину (я понял, что происходит это именно так). Для вершины у нас записан номер в векторе MyVertex. Далее смотрим, что за gl вершины у нас записаны в glVertexesId.
Поняли правильно. Такой подход в стиле С вполне возможен. Однако надо иметь и второй массив для хранения glVertexesId, причем создать его не так уж просто. Использование выглядит несколько громоздким, напр
C++ (Qt)
// получен index одного из вертексов
for (int i = 0; i < indices[index]; ++i)
SetColor(indices[index].glVertexesId[i]);
Хотелось бы более "в духе плюсов"