从std :: map中的vector获取数据

时间:2012-11-22 23:34:28

标签: c++ opengl

我正在尝试编写一个从.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.我解释这意味着有一个空指针问题,所以我放入测试向量以确保数据在那里。向量正确加载但仍然给出相同的错误。我做错了什么?

1 个答案:

答案 0 :(得分:1)

由于评论中有人建议我会提出答案。致电

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

导致OpenGL期望指向纹理坐标数组的指针。如果没有指定,则抛出空指针异常(尝试读取0x00000000)。除非您计划定义适当的指针,否则这里的教训是不启用客户端状态。