2014-04-15 45 views
0

好吧,我有一个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

glDrawArrays的第三个参数是错误的。您需要传递顶点的数量,这可能是data.points.size()

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

+0

有问题吗?我改变了我的代码来修复你的建议,但仍然没有绘制 – Dean

+0

我在你发布的代码中看不到任何其他问题。如果它没有绘制任何东西,可能有很多原因。最常见的是您的几何体不在相机的视野范围内。你是否在某处设置了点颜色?我有时候做的一件事是使用除黑色以外的清晰颜色。这会告诉你,如果你画黑点,或根本没有点。 –

+0

是的,我的相机是好的,它似乎是绘制一个点,没有别的......一切都在视线中,我想我将不得不继续检查 – Dean