Assimp没有正确加载索引 [英] Assimp not properly loading indices

查看:215
本文介绍了Assimp没有正确加载索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试加载简单的3d模型cube.3ds,但是会发生下一个错误:当我读取向量的索引时,向量包含:[0、1、2、3,...].这不正确.我发现了几乎相同的主题: Assimp和D3D模型加载:网格未在D3D中显示,但是我没有找到答案.任何人都可以正确地详细描述从网格加载索引的算法.非常感谢!

I'm trying to load simple 3d model cube.3ds, but next error occurs: when I read indices to my vector, vector contains: [0, 1, 2, 3, ...]. It's not properly. I found almost the same topic: Assimp and D3D model loading: Mesh not being displayed in D3D, but I don't found the answer. Can anyone describe in detail properly algorithm for loading indices from meshes. Thank's a lot!

推荐答案

以下是访问网格索引时从assimp示例代码中提取的示例.

Here is a example pulled from the assimp sample code on accessing the mesh indices.

for (; n < nd->mNumMeshes; ++n) 
{
    const struct aiMesh* mesh = scene->mMeshes[nd->mMeshes[n]];

    apply_material(sc->mMaterials[mesh->mMaterialIndex]);

    if(mesh->mNormals == NULL) {
        glDisable(GL_LIGHTING);
    } else {
        glEnable(GL_LIGHTING);
    }

    for (t = 0; t < mesh->mNumFaces; ++t) {
        const struct aiFace* face = &mesh->mFaces[t];
        GLenum face_mode;

        switch(face->mNumIndices) {
            case 1: face_mode = GL_POINTS; break;
            case 2: face_mode = GL_LINES; break;
            case 3: face_mode = GL_TRIANGLES; break;
            default: face_mode = GL_POLYGON; break;
        }

        glBegin(face_mode);

        for(i = 0; i < face->mNumIndices; i++) {
            int index = face->mIndices[i];
            if(mesh->mColors[0] != NULL)
                glColor4fv((GLfloat*)&mesh->mColors[0][index]);
            if(mesh->mNormals != NULL) 
                glNormal3fv(&mesh->mNormals[index].x);
            glVertex3fv(&mesh->mVertices[index].x);
        }

        glEnd();
    }
}

这篇关于Assimp没有正确加载索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆