从缓冲区上传和绘图

时间:2014-04-15 02:23:43

标签: opengl

好的,我有vector<float>的x,y,z值,我尝试使用opengl渲染它,某些东西不起作用,想知道我在做什么。我做错了,所以请帮忙!

这就是我生成缓冲区的方式

GLUint buffer;

int length = data.points.size() * 3 * sizeof(float);

glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, length, &data.points[0], GL_STATIC_DRAW);

这就是我绘制它的方式:

glEnableClientState(GL_VERTEX_ARRAY);                   
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glVertexPointer(3, GL_FLOAT, 0, (char *)NULL);
glDrawArrays(GL_POINTS, 0, buffer);
glDisableClientState(GL_VERTEX_ARRAY);

出了什么问题?

1 个答案:

答案 0 :(得分:1)

glDrawArrays的第三个参数是错误的。你需要传递那里的顶点数,在你的情况下可能是data.points.size()

data.points实际上是浮点数的向量,就像你的第一句话暗示的那样,还是某种点结构的向量?如果它只是浮动,其中总共有3个形成一个点,那么在计算length时乘以3也看起来很可疑。在这种情况下,长度只是data.points.size() * sizeof(float),作为glDrawArrays的第三个参数传递的点数将是data.points.size() / 3