Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Списки отображения


Автор: Ivan. 13.3.2018, 09:46
Здравствуйте коллеги.
Я новичок в OpenGL и хотел бы немного понимания в этой области.
Есть следующие вопросы:
Допустим я хочу нарисовать какую то сложную фигуру с тысячами граней различных текстур. могу ли я объединить эту фигуру в списки отображения с помощью glNewList, чтобы не формировать ее в каждом кадре
Код

void initializeGL() {
...
    figure.list = glGenLists(1);
    glNewList(figure.list, GL_COMPILE);
    int vertexLocation = program.attributeLocation("a_position");
    int texcoordLocation = program.attributeLocation("a_texcoord");
    for (auto it = figure.begin(); it != figure.end(); ++it) {
        it->texture.bind();
        it->vertices.bind();
        program.enableAttributeArray(vertexLocation);
        program.setAttributeBuffer(vertexLocation, GL_FLOAT, 0, 3, sizeof(QVector3D));
        it->texCoords.bind();
        program.enableAttributeArray(texcoordLocation);
        program.setAttributeBuffer(texcoordLocation, GL_FLOAT, 0, 2, sizeof(QVector2D));
        it->indices.bind();
        glDrawElements(GL_TRIANGLES, it->indices.size() / sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
    }
    glEndList();
}
void paintGL() {
...
    glCallList(figure.list);
}

На сколько это накладно многократно вызывать bind текстур и VBO? может создать один вершинный VBO для всей фигуры и множество индексных списков для каждой текстурной области?
Или я вообще не правильно подошел к этой задаче?
Правильно ли вообще совмещать списки отображения с шейдерами?

Автор: Ivan. 13.3.2018, 11:25
Полагаю, что использовать списки отображения не стоит, а поместить все в один VBO. тога как менять текстуры для разных граней?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)