【问题标题】:Odd results plotting Array with glVertexPointer stride variable使用 glVertexPointer 步幅变量绘制数组的奇怪结果
【发布时间】:2011-10-06 17:42:33
【问题描述】:

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

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:

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

【问题讨论】:

    标签: c++ opengl vertex-array


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2018-03-09
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多