2011-11-02 42 views
1

我使用ASSIMP的sample code中提供的帶紋理的3d模型加載樣本。但是,對於某些模型,它似乎無法正確訪問模型的頂點和法線。下面是該模型的屏幕截圖正確裝入:使用ASSIMP和OpenGL進行3D模型加載時頂點和正常訪問不正確

enter image description here

雖然模型應該像下面截圖:

enter image description here

在所述第一圖像,所述建築物的屋頂放置在前視圖的中心頂部。地板不見了。我認爲這個問題是由於對頂點位置和法線的錯誤訪問(CMIIW)造成的。以下是用於訪問頂點位置和法線的片段:

 glBegin(face_mode); 
     for(i = 0; i < face->mNumIndices; i++){ 
      int vertexIndex = face->mIndices[i]; // get group index for current index 
      if(mesh->mColors[0] != NULL) 
       Color4f(&mesh->mColors[0][vertexIndex]); 
      if(mesh->mNormals != NULL) 
       if(mesh->HasTextureCoords(0)){ 
        glTexCoord2f(mesh->mTextureCoords[0][vertexIndex].x, mesh->mTextureCoords[0][vertexIndex].y);     
       } 
       glNormal3fv(&mesh->mNormals[vertexIndex].x); 
       glVertex3fv(&mesh->mVertices[vertexIndex].x); 
     } 
     glEnd(); 

如何正確訪問模型的頂點位置和法線?

回答

1

發生了什麼,具有相同位置的頂點是「共享」的。這是有問題的,因爲(在OpenGL術語中),頂點是[位置,法線,紋理座標,其他屬性...]的整個組合。

在導出器或加載程序的某處,此信息將丟失。

您可以通過在硬邊緣處分割網格來修復此問題,即選擇光滑曲面的連續色塊並將它們轉換爲單獨的子網格(例如,在「分離網格」功能中的「Blender」中,熱鍵'Y 「)。

相關問題