2010-07-16 60 views
4

存儲用於VBO(或頂點數組)的動態數據的最佳方式是什麼?我看到的例子只有2D靜態數組,指向該數組的指針用於下一個參數作爲步長,用於一個元素的字節等。我可以使用「動態」數組,因此我可以在空中指定它的大小,但只是一次。我的觀點是,例如,如果你已經畫了1000點(談論2D,所以我認爲點比頂點更好),並且你添加了新的點,這樣你必須創建一個大小爲1001的新數組,複製一切從舊到新的領域,添加新的點,並將其發送到圖形的內存。最好的方法是使用vector或deques作爲臨時存儲,但之後我必須轉換爲數組並再次發送它。OpenGL中的動態VBO

那麼有沒有更好的方法來做到這一點?我是否只能將新零件添加到VBO而不發送舊數據?或更好的方式來存儲數據/使用矢量作爲數據源而無需轉換?

回答

4

我通常只是用「OLE矢量招:

struct GL_Vertex 
{ 
    Eigen::Vector2f tex; 
    Eigen::Vector3f color; 
    Eigen::Vector3f pos; 
}; 
... 
vector<GL_Vertex> buf(1000); 
... 
glTexCoordPointer(2, GL_FLOAT, sizeof(GL_Vertex), &buf[0].tex); 
glColorPointer(3, GL_FLOAT, sizeof(GL_Vertex), &buf[0].color); 
glVertexPointer(3, GL_FLOAT, sizeof(GL_Vertex), &buf[0].pos); 
+0

怎麼能工作呢?我認爲,矢量存儲額外的信息在哪裏尋找下一個成員。我怎樣才能使用這與第三參數glBufferData? – Raven 2010-07-16 22:40:39

+2

std :: vector保證存儲彼此相鄰的元素。對於glBufferData()和一個原始浮點數的向量或任何你只需要刪除結構體的表達式:&vec [0] – genpfault 2010-07-16 23:54:18