Ответ 1
Код точечного рисования отлично, как есть.
(В долгосрочной перспективе вы можете столкнуться с проблемами производительности, если вам нужно нарисовать эти точки несколько раз, скажем, в ответ на поворот пользователя. Перестановка данных из 3 массивов в 1 с значениями x, y, z рядом с каждым другие позволят вам использовать более быстрые массивы вершин /VBOs. Но пока, если он не сломался, не исправляйте его.)
Чтобы покрасить точки, вам нужно glColor перед каждым glVertex. Это должно быть до, а не после, потому что в OpenGL glVertex свободно означает, что полная вершина, нарисуйте его. Вы описали данные как облако точек, поэтому не меняйте glBegin на GL_POLYGON, оставьте его как GL_POINTS.
ОК, у вас есть еще один массив с одним байтом значений индекса цвета. Вы можете начать с использования этого уровня оттенков серого с помощью
glColor3ub(color[i][j], color[i][j], color[i][j]);
который должен показывать точки, отличающиеся от черного до белого.
Чтобы получить истинный цвет для каждой точки, вам нужна таблица поиска цветов - я предполагаю, что есть либо тот, который поставляется с данными, либо тот, который вы создаете. Он должен быть объявлен как
static GLfloat ctab[256][3] = {
1.0, 0.75, 0.33, /* Color for index #0 */
...
};
и используется перед glVertex с
glColor3fv(ctab[color[i][j]]);
Я использовал цвета с плавающей запятой, потому что то, что OpenGL использует внутри себя в эти дни. Если вы предпочитаете значения 0..255 для цветов, измените массив на GLubyte и glColor3fv на glColor3ub.
Надеюсь, что это поможет.