我正在尝试创建对象的动态数组,然后将其用于VBO。

Vector3f Vertices[] = new Vector3f[size];
/*
    initialization
*/

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);


但是我有以下错误:
initialization with '{...}' expected for aggregate object
那么,我该怎么做呢?我想这一定有可能。

最佳答案

我以前的评论:在调用sizeof(Vector3f) * size时,您需要sizeof(Vertices)而不是glBufferData,即数据大小(以字节为单位)。



1 /。使用:Vector3f *vertices = new Vector3f[size];

vertices是Vector3f数组的指针(如果需要,在元素之间使用适当的填充,由sizeof(Vector3f)给出。每个Vector3f元素都是使用Vector3f的默认构造函数构造的。

2 /。考虑使用以下命令管理数据:std::vector<Vector3f> vertices (size);-因此您可以在vector容器上进行管理和操作,而不是管理指针。由于std :: vector数据具有连续访问权限,因此可以使用:

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vector3f), vertices.data(), GL_STATIC_DRAW);

如果要更改顶点(Vector3f)容器的大小,请让std::vector<>::size()注意元素的数量。

显然,这里不需要任何显式的delete。一旦Vector3f容器超出范围,它将自动销毁。甚至还没有触及可以在容器上运行的泛型函数的所有优点...合并,反转,排序...您只需免费获得几样东西。

关于c++ - 为VBO创建对象的动态数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27997092/

10-08 21:25