OpenGL -添加顶点
OpenGL - add vertices
我有一个子函数,读取数据流并创建基于该顶点数据的数组。主函数反复调用此子函数并更新顶点数据数组,然后将其绑定到缓冲区并绘制。到目前为止,一切顺利。然而,我不知道如何添加顶点。c++不允许重新分配或调整整个数组的大小。我不能使用向量,因为OpenGL函数接受数组,而不是向量。
你可以使用矢量填充OpenGL顶点缓冲区。保证vector
中的值是连续的。有关相关语言标准的详细信息,请参见以下讨论:
- std::vector元素是否保证连续?
- 假设STL向量存储总是连续的是安全的吗?
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);
我对OGL数据使用STL向量有很多原因。如果您知道大小,则很容易预先分配,并且在添加项时它们会增长(并保持连续)。它们很容易迭代。如果你想传递交错的数据,你可以很容易地创建结构向量。都是一样的
相关文章:
- 如何循环打印顶点结构
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- 通过相邻顶点列表添加和减去图形中的边
- 使用C 中的邻接列表在图中添加顶点
- 将边缘节点添加到没有边缘的顶点时出现 Seg 错误
- 尝试将顶点添加到自定义Graph数据结构时出现分段错误
- 使用邻接列表将顶点添加到图形
- 将自定义属性添加到Boost图库中的网格顶点
- 当添加一条边时,使提升图仅包含两个顶点
- 在3D结构中添加新的顶点
- 添加一个外部属性以包含图中顶点的索引(boost)
- 如何在c++中使用igraph_add_vertices添加顶点后获得igraph顶点id
- OpenGL -添加顶点