如何使用GL_LINE_STRIP绘制许多线,但又不能在这些线之间画多余的线,因为它会跳到下一个值?看图片

c++ -  vector 中带有glDrawArrays和GL_LINE_STRIP的折线图-LMLPHP

现在,红线是图中线的实际值,而黄线是因为它完成了line1的值并继续到下一个,但仍在这些值之间绘制了一条线。

我正在使用的代码是这样的:vector1包含所有行值。

glGenVertexArrays(1,&Vector1_VAObject);
glGenBuffers(1,&Vector1_VBObject);

glBindVertexArray(Vector1_VAObject);
glBindBuffer(GL_ARRAY_BUFFER, Vector1_VBObject);

glBufferData(GL_ARRAY_BUFFER,vector1.size()*sizeof(GLfloat), &vector1[0] ,GL_STATIC_DRAW);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE, 3*sizeof(GLfloat),(GLvoid*)0);
//Clean
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);

glUseProgram(lineShader->getProgram());
glBindVertexArray(Vector1_VAObject);

glDrawArrays(GL_LINE_STRIP,0,vector1.size());


glBindVertexArray(0);

所以我的问题是如何解决这个问题?因此,它遍历 vector 并且仅绘制线条的值,而不是在完成绘制第一条线条之后跳转时的值。

最佳答案

使用GL_LINE_STRIP(或等效于三角形的GL_TRIANGLE_STRIP)进行绘制就像将笔放在纸上并在没有的情况下绘制某些东西,而不会将笔取下。您不能在两个连续点之间划一条线。

如果您真的想使用GL_LINE_STRIP来绘制图形(这是一个好主意),然后再进行其他操作,则必须制作不同的缓冲区并使用不同的参数绘制许多次glDrawArrays

因此,假设vector1存储红线,而vector2存储黄线。初始化部分如下所示:

// vector1 store
glGenVertexArrays(1,&Vector1_VAObject);
glGenBuffers(1,&Vector1_VBObject);

glBindVertexArray(Vector1_VAObject);
glBindBuffer(GL_ARRAY_BUFFER, Vector1_VBObject);

glBufferData(GL_ARRAY_BUFFER,vector1.size()*sizeof(GLfloat), &vector1[0] ,GL_STATIC_DRAW);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE, 3*sizeof(GLfloat),(GLvoid*)0);

// vector2 store
glGenVertexArrays(1,&Vector2_VAObject);
glGenBuffers(1,&Vector2_VBObject);

glBindVertexArray(Vector2_VAObject);
glBindBuffer(GL_ARRAY_BUFFER, Vector2_VBObject);

glBufferData(GL_ARRAY_BUFFER,vector2.size()*sizeof(GLfloat), &vector2[0] ,GL_STATIC_DRAW);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE, 3*sizeof(GLfloat),(GLvoid*)0);

//Clean
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);

然后是抽奖部分:
glUseProgram(lineShader->getProgram());

glBindVertexArray(Vector1_VAObject);
glDrawArrays(GL_LINE_STRIP,0,vector1.size());

glBindVertexArray(Vector2_VAObject);
glDrawArrays(GL_LINE_STRIP,0,vector2.size());

关于c++ - vector 中带有glDrawArrays和GL_LINE_STRIP的折线图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31723405/

10-13 02:58