2013-07-22 7 views
0

Я пытаюсь загрузить простую 3d модель cube.3ds, но возникает следующая ошибка: когда я читаю индексы для своего вектора, вектор содержит: [0, 1, 2, 3, ...] , Это неправильно. Я нашел почти ту же тему: Assimp and D3D model loading: Mesh not being displayed in D3D, но я не нашел ответа. Может ли кто-нибудь описать подробно алгоритм загрузки индексов из сеток. Большое спасибо!Assimp не правильно загружает индексы

ответ

2

Вот пример, извлеченный из кода образца апельсина при доступе к индексам сетки.

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(); 
    } 
} 
+0

Благодарим вас за этот код. Но моя ошибка была в другом месте. Когда я читаю сцену через assimp, я просто передал только флаги aiProcess_Triangulate, но для правильной загрузки индексов также необходимо передать aiProcess_JoinIdenticalVertices. – eugene

 Смежные вопросы

  • Нет связанных вопросов^_^