0

我有一个 Nx4 顶点数组,我想使用glVertexArray和绘制glDrawArray。作为二维散点图。我目前像这样初始化数组:

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
}

然后我绘制二维散点图:

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

正确显示如下:

在此处输入图像描述

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

但是,由于我只想要一个 2d 图,我想跳过 2 个未使用的维度。我试着告诉glVertexPointer我的顶点只有 2 个点,然后将顶点之间的步幅也设置为 2,但这似乎并没有像我认为的那样工作。

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

然而,当我绘制这个时,我得到了一个非常不同的结果,点显示在 XxY、YxZ、ZxW:

在此处输入图像描述

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

4

1 回答 1

2

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

glVertexPointer(2, GL_INT, sizeof(GLint)*4, data2); 
于 2011-10-06T17:52:31.903 回答