gpt4 book ai didi

c++ - 使用 glVertexPointer 步幅变量绘制数组的奇怪结果

转载 作者:行者123 更新时间:2023-11-28 03:46:00 25 4
gpt4 key购买 nike

我有一个 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);

正确显示如下:

enter image description here

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

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

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

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

enter image description here

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

最佳答案

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

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

关于c++ - 使用 glVertexPointer 步幅变量绘制数组的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com