从 std::map 中的向量获取数据
Getting data from vector in an std::map
我正在尝试编写一个从.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。我将其解释为存在空指针问题,因此我放入测试向量以确保数据在那里。向量加载正确,但仍给出相同的错误。我做错了什么?
既然在评论中提出了建议,我将提出答案。对
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
使 OpenGL 期望指向纹理坐标数组的指针。如果未指定任何内容,则会引发空指针异常(尝试读取0x00000000)。这里的教训是不要启用客户端状态,除非你计划定义适当的指针。
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 如何从用户那里获取输入并将其存储在向量中?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++获取传递给函数的向量的名称
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 如何从C++的对的排序向量中获取有关给定值的相应对
- push_back通过自行创建的对象获取最后一个元素的向量
- 从自定义类获取对象向量中的 max 元素
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 沿向量获取点
- 如何在指定数据之间将数据从一个向量获取到另一个向量
- 从向量获取值
- 通过函数参数从向量获取类指针
- C++:从向量<向量获取 T**<T>>
- 从 std::map 中的向量获取数据
- 从节点数组和边缘向量获取所有子树的最有效方法是什么
- C++在尝试编写对象读取器时,在尝试从一个向量获取数据时出错
- C++:向量获取意外数据
- 无法从另一个向量内的向量获取数据
- 如何从 unique_ptr 向量获取派生迭代器<Base>?