簡體   English   中英

從std :: map中的vector獲取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM