[英]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)。 除非您打算定義適當的指針,否則這里的課程是不啟用客戶端狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.