好的,我有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);
出了什么问题?
答案 0 :(得分:1)
glDrawArrays
的第三个参数是错误的。你需要传递那里的顶点数,在你的情况下可能是data.points.size()
。
data.points
实际上是浮点数的向量,就像你的第一句话暗示的那样,还是某种点结构的向量?如果它只是浮动,其中总共有3个形成一个点,那么在计算length
时乘以3也看起来很可疑。在这种情况下,长度只是data.points.size() * sizeof(float)
,作为glDrawArrays
的第三个参数传递的点数将是data.points.size() / 3
。