我正在尝试编写一个从 .3ds 文件渲染模型的类,但我遇到了一个非常烦人的问题。我有一个从整数到双精度向量的映射
map<int, vector<double> >
我用来映射具有不同材质属性的顶点。之后,我尝试遍历所有键并让 OpenGL 像这样渲染它们:
glPushMatrix();
glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
for(map<int, vector<double> >::iterator iter = myMaterialVertices.begin(); iter != myMaterialVertices.end(); iter++)
{
vector<double> test = iter->second;
glVertexPointer(3, GL_DOUBLE, 0, test.data());
//get the texture coords here
glDrawArrays(GL_TRIANGLES, 0, iter->second.size() / 3);
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopClientAttrib();
glPopMatrix();
不幸的是,每次调用 glDrawArrays 时都会出现错误,告诉我我正在尝试读取地址 0。我将此解释为存在空指针问题,因此我输入了测试向量以确保数据存在. 向量被正确加载但仍然给出相同的错误。我究竟做错了什么?