Создание нечетных результатов Array с переменной шага glVertexPointer - PullRequest
0 голосов
/ 06 октября 2011

У меня есть массив вершин Nx4, который я хотел бы построить, используя glVertexArray и glDrawArray. как 2D-график рассеяния. В настоящее время я инициализирую массив следующим образом:

GLint data[4][MAX_N_POINT];

for (int j=0; j<MAX_N_POINT; j++)
{
    data[j][0] = 200 + rand()%20 - 10; // X Dimension
    data[j][1] = 400 + rand()%20 - 10; // Y Dimension
    data[j][2] = 600 + rand()%20 - 10; // Z Dimension
    data[j][3] = 1; // W Dimension
}

Затем я рисую 2d разброс с помощью:

glVertexPointer(4, GL_INT, 0, data);
glDrawArrays(GL_POINTS, 0, nPlot);

Который правильно отображается как это:

enter image description here

примечание: цветные квадраты на заднем плане, так что я могу легко судить, падают ли точки в правильном месте

Однако, поскольку я хочу только двухмерный график, я бы хотел пропустить 2 неиспользуемых измерения. Я попытался сказать glVertexPointer, что мои вершины имеют только 2 точки, а затем установил шаг между вершинами также равным 2, но, похоже, это не работает так, как я думал.

glVertexPointer(2, GL_INT, 2, data2); 
glDrawArrays(GL_POINTS, 0, nPlot);

Однако, когда я рисую это, я получаю совсем другой результат с точками, отображаемыми в XxY, YxZ, ZxW:

enter image description here

Правильно ли я понял правильную функцию переменной шага? Если нет, то как я могу правильно установить шаг, чтобы нижний график напоминал верхний график?

1 Ответ

2 голосов
/ 06 октября 2011

Шаг - это не «разрыв» между векторами, шаг - это расстояние между точками начала вектора. Таким образом, в вашем случае ваши векторы разнесены на «sizeof (int) * 4», что является расстоянием между шагами:

glVertexPointer(2, GL_INT, sizeof(GLint)*4, data2); 
...