簡體   English   中英

OpenGL-添加頂點

[英]OpenGL - add vertices

我有一個子函數,它讀取數據流並基於該子函數創建一個頂點數據數組。 主函數反復調用此子函數並更新頂點數據數組,然后將其綁定到緩沖區並繪制。 到現在為止還挺好。 但是,我不知道如何添加頂點。 C ++不允許您重新分配或調整整個數組的大小。 我不能使用向量,因為OpenGL函數采用數組而不是向量。

您可以使用向量來填充OpenGL頂點緩沖區。 vector中的值保證是連續的。 例如,請參閱以下討論以獲取有關語言標准的詳細信息:

這意味着下面的代碼是安全的:

std::vector<GLfloat> vertexPositions;
// Populate vector with vertex positions.
GLuint bufId = 0;
glGenBuffers(1, &bufId);
glBindBuffer(GL_ARRAY_BUFFER, bufId);
glBufferData(GL_ARRAY_BUFFER, vertexPositions.size() * sizeof(GLfloat),
             &vertexPositions[0], GL_STATIC_DRAW);

微妙但關鍵的部分是您傳入向量的第一個元素的地址,而不是向量對象的地址。

我會稍作修改。 雖然您可以將&vertexPositions [0]用作STL向量的開始地址,但我更喜歡使用旨在返回向量存儲器的開始地址的函數vertexPositions.data()。

std::vector<GLfloat> vertexPositions;
// Populate vector with vertex positions.
GLuint bufId = 0;
glGenBuffers(1, &bufId);
glBindBuffer(GL_ARRAY_BUFFER, bufId);
glBufferData(GL_ARRAY_BUFFER, vertexPositions.size() * sizeof(GLfloat), vertexPositions.data(), GL_STATIC_DRAW);

由於多種原因,我將STL向量用於OGL數據。 如果您知道大小,則可以輕松進行預分配,並且在添加項目時它們會增長(並保持連續)。 它們很容易迭代。 如果要傳遞交錯數據,則可以輕松創建結構的向量。 一切都一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM