2014-04-15 47 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