我用C++和OpenGL编写了一个模型加载器。我使用std::vector
来存储我的顶点数据,但现在我想将其传递给glBufferData()
,然而数据类型差别很大。我想知道是否有一种方法可以在std::vector
和文档中记录的const GLvoid *
(用于glBufferData()
)之间进行转换。
顶点类型
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
我如何将向量转换为与glBufferData()
兼容的类型?
NB。 我暂时不关心正确的内存分配; vertices.size() * 3 * sizeof(float)
很可能会导致段错误,但是我首先想解决类型错误。
3 * sizeof(float)
问题。你传递的不是每个条目都是3个浮点数的数组,而是每个条目都是一个“Vertex”对象的数组。这比3个浮点数大得多。 - Nicol Bolas