加载大OBJ文件会导致模型损坏?

时间:2018-12-29 09:07:35

标签: c++ opengl wavefront

我写了一个obj loader。这很简单,但是我敢肯定它可以工作。我检查了文件中的值和加载程序打印的值,它们匹配。 当我尝试加载像stanford dragon或Bunny这样的大obj文件时,会出现问题。犹他州茶壶(3664 verts)可以很好地工作,但是龙(50k verts)却表现得非常糟糕:

Renders

如您所见,龙出了毛病。似乎只渲染了三角形的一部分。

P.S。所有模型均已三角剖分。

网格加载:

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));

indicesposstd::vectors,position和ind只是复制到堆分配的内存中的那些向量的内容(以防万一它会有所改变,但不会,那不是)不能改变任何东西)。 load方法采用指向数据的指针,字节大小,向量中的字段(3d向量-3个字段,2d向量-2个字段)以及最后一个整数,该整数告诉该数据是哪个属性(MESH_TARGET_POS-属性1,顶点职位)。

该代码与问题无关(我相信)。每个小于1万个顶点的模型都可以正常工作,即使低多边形的龙也可以正常工作。

0 个答案:

没有答案