我有一个子函数,它读取数据流并基于该数据流创建顶点数据数组。主函数重复调用该子函数并更新顶点数据数组,然后将其绑定到缓冲区并进行绘制。到目前为止,一切都很好。但是,我不知道如何添加顶点。 C++ 不允许您重新分配或调整整个数组的大小。我不能使用向量,因为 OpenGL 函数接受数组,而不是向量。
您可以使用向量来填充 OpenGL 顶点缓冲区。 a 中的值vector
保证是连续的。有关相关语言标准的详细信息,请参阅以下讨论:
- std::vector 元素是否保证是连续的? https://stackoverflow.com/questions/849168/are-stdvector-elements-guaranteed-to-be-contiguous
- 假设 STL 向量存储始终是连续的是否安全? https://stackoverflow.com/questions/247738/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);
微妙但关键的部分是您传递的地址第一个元素向量的地址,而不是向量对象的地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)