为 VBO 创建动态对象数组
Create dynamic array of objects for VBO
我正在尝试创建动态对象数组,然后将其用于 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
那么,我该怎么做呢?我想这一定是可能的。
您可能需要使用 std::vector 或 std::list 代替传统的 C 数组。
这里有一个参考[=11=]
OpenGL: Using VBO with std::vector
我之前的评论:在调用 glBufferData
.
时,您需要 sizeof(Vector3f) * size
而不是 sizeof(Vertices)
,即以字节为单位的数据大小
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 容器超出范围,它就会自动销毁。甚至还没有触及可以在容器上运行的通用函数的所有优点...合并、反转、排序...只是您免费获得的一些东西。
我正在尝试创建动态对象数组,然后将其用于 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
那么,我该怎么做呢?我想这一定是可能的。
您可能需要使用 std::vector 或 std::list 代替传统的 C 数组。
这里有一个参考[=11=]
OpenGL: Using VBO with std::vector
我之前的评论:在调用 glBufferData
.
sizeof(Vector3f) * size
而不是 sizeof(Vertices)
,即以字节为单位的数据大小
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 容器超出范围,它就会自动销毁。甚至还没有触及可以在容器上运行的通用函数的所有优点...合并、反转、排序...只是您免费获得的一些东西。