我有一個子功能,它讀取數據流並基於此創建一個頂點數據數組。主函數重複調用該子函數並更新頂點數據數組,然後將其綁定到緩衝區並繪製。到現在爲止還挺好。但是,我不知道如何添加頂點。 C++不會讓您重新分配或調整整個數組的大小。我不能使用矢量,因爲OpenGL函數需要數組,而不是矢量。OpenGL - 添加頂點
0
A
回答
3
您可以使用矢量來填充OpenGL頂點緩衝區。 vector
中的值保證是連續的。見例如,對於細節這些討論對相關語言標準:
- Are std::vector elements guaranteed to be contiguous?
- Is it safe to assume that STL vector storage is always contiguous?
這意味着類似下面的代碼是安全的:
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);
微妙但關鍵部分是你傳遞的地址的第一個元素矢量,而不是矢量對象的地址。
1
我會稍作修改。雖然可以使用頂點位置[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數據。如果知道尺寸,預先分配很容易,添加項目時它們會增長(並保持連續)。它們很容易遍歷。如果您想傳遞交錯數據,您可以輕鬆創建結構向量。這一切都是一樣的。
+0
我沒有在答案中使用'data()'方法,因爲它只在C++ 11中引入,而另一種方法適用於所有版本的C++。無論如何,這看起來更像是評論而非答案。 –
相關問題
- 1. 如何添加頂點到OpenGL C++ triangle_fan
- 2. OpenGL ES - 更新頂點數組,添加/刪除頂點
- 3. OpenGL:使用頂點着色器添加頂點
- 4. 加亮OpenGL中的頂點
- 5. 將DirectX頂點轉換爲OpenGL頂點
- 6. 如何在OpenGl中動態添加頂點?
- 7. iOS上的OpenGL ES向緩衝區添加頂點
- 8. 添加節點頂部
- 9. 添加頂點與Arraylist
- 10. OpenGL中的頂點座標
- 11. OpenGL生成頂點屬性
- 12. OpenGL頂點屬性重用
- 13. Opengl地形高度/頂點
- 14. C++/OpenGL/SFML頂點着色
- 15. Star OpenGL的頂點陣列
- 16. OpenGL複製頂點陣列
- 17. OpenGL重疊頂點屬性
- 18. 連接球體頂點OpenGL
- 19. Opengl頂點數組對象
- 20. OpenGL頂點和緩衝區
- 21. 頂點重疊在OpenGL
- 22. VBO的頂點數組-OpenGL
- 23. opengl頂點不渲染
- 24. OpenGL的:頂點數組
- 25. OpenGL中的頂點限制
- 26. OpenGL的頂點數組
- 27. C++ OpenGL - 頂點顏色
- 28. OpenGL ES 2.0頂點照明
- 29. 在Three.js中添加點到頂點
- 30. 在mxGraph中添加子頂點到父頂點
有趣。來自Java背景,我沒有立即識別矢量 - >指針<->數組路徑。謝謝。 – user2258552