簡體   English   中英

OpenGL glDrawElements

[英]OpenGL glDrawElements

給定一組Faces,每個Face包含頂點數和一個指向向量std :: Vector的頂點的指針,我要遍歷所有面孔並使用glDrawElements繪制每個面孔:

編輯:我只是注意到我忘了激活vertex_array

for(std::vector<Face>::iterator it = faces.begin();it != faces.end();++it) {
    const Face &f = *it;

    std::Vector<GLint> indices;
    std::Vector<GLfloat> positions;

    for(int i=0;i<f.vcount;++i){
        const Vertex &v = vertices[f.vertices[i]];

        positions.push_back(v.x);
        positions.push_back(v.y);
        positions.push_back(v.z);

        indices.push_back(f.vertices[i]);
    }
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3,GL_FLOAT,3*sizeof(GL_FLOAT),&positions[0]);                     

    glDrawElements(GL_POLYGON,indices.size(),GL_UNSIGNED_INT,&indices[0]);
    glDisableClientState(GL_VERTEX_ARRAY);
    positions.clear();
    indices.clear();
}

但是顯然這不能正常工作,並且沒有任何顯示。

編輯:啟用GL_VERTEX_ARRAY會在屏幕上繪制某些內容,但不會繪制我嘗試創建的模型。 因此,尋址似乎有問題。

您的索引數組沒有意義。 索引glDrawElements將僅引用您已設置的頂點數組-並且您正在為每個單獨的多邊形設置一個新數組。

這意味着

indices.push_back(f.vertices[i]);

從概念上講應該是公正的

indices.push_back(i);

最后意味着您可以完全跳過索引,而只需使用

glDrawArrays(GL_POLYGON,0,f.vcount);

請注意,您在此處執行的操作是無效的渲染對象的方法。 如果對整個對象使用單個繪制調用,效果會更好。 您可以通過手動將多邊形三角剖成三角形作為預處理步驟來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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