gpt4 book ai didi

c++ - 带有 std::vector 的 VBO

转载 作者:IT老高 更新时间:2023-10-28 12:34:17 26 4
gpt4 key购买 nike

我用 C++ 和 OpenGL 编写了一个模型加载器。我使用 std::vectors 来存储我的顶点数据,但现在我想将它传递给 glBufferData(),但是数据类型大不相同。我想知道是否有办法将 std::vector 转换为 glBufferData() 的文档 const GLvoid *

顶点类型

typedef struct
{
float x, y, z;
float nx, ny, nz;
float u, v;
}
Vertex;

vector<Vertex> vertices;

glBufferData() 调用

glBufferData(GL_ARRAY_BUFFER, vertices.size() * 3 * sizeof(float), vertices, GL_STATIC_DRAW);

我收到以下(预期的)错误:

error: cannot convert ‘std::vector<Vertex>’ to ‘const GLvoid*’ in argument passing

如何将 vector 转换为与 glBufferData() 兼容的类型?

注意。我现在不关心正确的内存分配; vertices.size() * 3 * sizeof(float) 很可能会出现段错误,但我想先解决类型错误。

最佳答案

如果您有 std::vector<T> v ,您可以获得T*使用表达式 &v[0] 指向连续数据的开始(这是 OpenGL 之后的内容) .


在您的情况下,这意味着传递 Vertex*glBufferData :

glBufferData(
GL_ARRAY_BUFFER,
vertices.size() * sizeof(Vertex),
&vertices[0],
GL_STATIC_DRAW
);

或者像这样,也一样:

glBufferData(
GL_ARRAY_BUFFER,
vertices.size() * sizeof(Vertex),
&vertices.front(),
GL_STATIC_DRAW
);

您可以依赖 Vertex* 的隐式转换至void const*这里;这应该不会造成问题。

关于c++ - 带有 std::vector 的 VBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com