Подтвердить что ты не робот

Opengl 3d point cloud render от x, y, z 2d массив

Нужно какое-то направление на 3d-облачном дисплее с использованием openGl в С++ (vs2008). Я пытаюсь сделать 3D-облачный дисплей с текстурой. У меня есть 3 2D-массива (каждый размер 1024x512), представляющий x, y, z каждой точки. Я думаю, что я на правильном пути с

glBegin(GL_POINTS);
for(int i=0; i<1024; i++)
{
   for(int j=0; j<512; j++)
   {
       glVertex3f(x[i][j], y[i][j], z[i][j]);
   }
 }    
}    
glEnd();

Теперь это загружает все вершины в буфере (я думаю), но отсюда я не уверен, как действовать дальше. Или я полностью неправильно здесь.

Затем у меня есть еще один 2D-массив (тот же размер), который содержит данные цвета (значения от 0 до 255), которые я хочу использовать в качестве текстуры в облаке 3D 3D и дисплее.

4b9b3361

Ответ 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.

Надеюсь, что это поможет.