Загрузка больших файлов OBJ приводит к повреждению модели? - PullRequest
0 голосов
/ 29 декабря 2018

я написал obj загрузчик.Это очень просто, но я уверен, что это работает.Я проверил значения в файле и те, которые напечатаны загрузчиком, и они совпадают.Проблема возникает, когда я пытаюсь загрузить большой файл obj, такой как stanford dragon или Bunny.Чайник из Юты (3664 верт) работает отлично, однако дракон (50 тысяч верт) выглядит ужасно неправильно:

Renders

Как вы видите что-тоне так с драконом.Кажется, что только часть треугольников визуализируется.

PS Все модели были триангулированы.

Загрузка сетки:

void Mesh::load(float* buffer, unsigned int size, char fields, char target) {
        unsigned int vbo;
        glGenBuffers(1, &vbo);

        glBindVertexArray(vao);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glVertexAttribPointer(target, fields, GL_FLOAT, false, sizeof(float) * fields, 0);
        glBufferData(GL_ARRAY_BUFFER, size, buffer, GL_STATIC_DRAW);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glBindVertexArray(0);

        vbos[target] = vbo;
    }

    void Mesh::loadIndices(void* buffer, unsigned int size) {
        glGenBuffers(1, &ibo);

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, buffer, GL_STATIC_DRAW);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    }

и сетка:

mesh = new Mesh();
    mesh->numIndices = indices.size();
    mesh->load(positions, pos.size() * sizeof(float), 3, MESH_TARGET_POS);
    mesh->loadIndices(ind, indices.size() * sizeof(unsigned int));

indices и posstd::vectors, позиции и ind - это просто содержимое этих векторов, скопированных в выделенную память кучи (на случай, если это что-то изменит, но нет, это ничего не изменит).Метод load принимает указатель на данные, размер в байтах, поля в векторе (3-й вектор - 3 поля, 2-й вектор - 2 поля) и, наконец, целое число, указывающее, какой атрибут является этими данными (MESH_TARGET_POS - атрибут 1, позиции вершин),

Этот код не имеет отношения (я считаю) к проблеме.Все модели с вершинами меньше 10k работают нормально, даже дракон в нижнем полигоне работает отлично.

...