我有一个名为lineVertices
的线的顶点向量,我将传递此数据以绘制OpenGL形状,因此这个向量必须是数组的形式,我假设。我尝试过以下代码:
float* lineArray = new float[lineVertices.size()]();
for (unsigned i = 0; i < lineVertices.size(); i++) {
lineArray[i] = lineVertices.at(i);
}
但是,似乎向量的每个元素只被分配给数组的第一个元素。即使lineArray
标识符是指向第一个元素的指针,是否有另一种方法来访问动态数组的不同元素?
如果有帮助,我在调试时会说lineArray
的大小始终为1,尽管lineVertices'
大小明显大于1。
我也尝试过以下代码,但这也行不通。
float* lineArray = &lineVertices[0];
感谢任何帮助!
答案 0 :(得分:1)
您可以将std::vector
直接传递给OpenGL函数,并获取指向数组的指针。只需使用::data()
成员函数即可。例如:
std::vector<float> vec = ...;
glVertex2fv(vec.data()); // only uses the first two elements
像这样的OpenGL函数接受一个或多个元素的指针。这不必是使用new
创建的原始数组;它只需要是一个连续元素列表的指针。使用vector.data()
获取指向std::vector
内容的指针(第一个元素)。
如果你真的想用手动内存管理创建一个新数组,你可以这样做(与你发布的代码效果相同):
float* arr = new float[vec.size()]; // NO () - not a constructor, but operator new[]
for (size_t i = 0; i < vec.size(); i++) {
arr[i] = vec[i];
}