使用glVertexPointer stride变量绘制Array的奇数结果

时间:2011-10-06 17:42:34

标签: c++ opengl vertex-array

我有一个Nx4顶点数组,我想用glVertexArrayglDrawArray绘制。作为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

注意:背景中的彩色方块是如此我可以轻松判断这些点是否落在正确的位置

然而,由于我只想要一个2D图,我想跳过2个未使用的尺寸。我试着告诉glVertexPointer我的顶点只有2个点,然后将顶点之间的步幅设置为2,但这似乎不像我想象的那样有效。

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

然而,当我绘制这个时,我会得到一个非常不同的结果,其中的点出现在XxY,YxZ,ZxW:

enter image description here

我是否误解了步幅变量的正确功能?如果不能,我怎样才能正确设置步幅,以使底部图形类似于顶部图?

1 个答案:

答案 0 :(得分:2)

步幅不是矢量之间的“间隙”,步幅是矢量起始位置之间的距离。因此,在您的情况下,您的向量是“sizeof(int)* 4”,这是使用的步幅:

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