2015-10-11 72 views
0

我想從使用Assimp的obj文件加載模型,但它提供了不正確的數據。我嘗試了一些不同的東西,但找不到問題。簡單的Assimp程序給出不正確的數據

頂點位置已關閉(略),但有趣的是,臉部數據格式不正確。在我的OBJ文件(包括)中有20張臉。在這個例子中,我的程序顯示了20個面,但其中一些只有2個索引!這是與三角標誌上,所以我不知道這是一個assimp或我的代碼中的錯誤。我也嘗試了其他一些標誌,但似乎沒有任何工作。

我壓實,這似乎是引起下面

TEST.CPP

#include <SDL2/SDL.h> 
#include <GL/glew.h> 
#include <SDL2/SDL_opengl.h> 
#include <assimp/Importer.hpp> 
#include <assimp/scene.h> 
#include <assimp/postprocess.h> 
#define GLM_FORCE_RADIANS 
#include <glm/glm.hpp> 
#include <glm/gtc/matrix_transform.hpp> 
#include <iostream> 

using namespace std; 

int main(int argc, char* args[]) 
{ 
    Assimp::Importer importer; 

    const aiScene * scene = NULL; 

    scene = importer.ReadFile("box.obj", aiProcess_JoinIdenticalVertices | aiProcess_Triangulate); 

    if(!scene) 
    { 
     return -1; 
    } 

    for(GLuint i = 0; i < scene->mNumMeshes; i++) 
    { 
     const aiMesh* mesh = scene->mMeshes[i]; 

     //float* vertices = new float[mesh->mNumVertices * 3]; 
     //float* faces = new float[mesh->mNumFaces * 3]; 

     cout << "has positions: " << mesh->HasPositions() << " has faces: " << mesh->HasFaces() << endl; 

     cout << "vertex count: " << mesh->mNumVertices << endl; 
     cout << "face count: " << mesh->mNumFaces << endl; 

     for(GLuint j = 0; j < mesh->mNumFaces; j++) 
     { 

      cout << "Face Indices: " << mesh->mFaces[j].mNumIndices << " "; 

      for(GLuint k = 0; k < mesh->mFaces[j].mNumIndices; k++) 
      { 
       cout << "I" << k << " V" << mesh->mFaces[j].mIndices[k] << " "; 
      } 

      cout << endl; 

      //faces[j * 3] = mesh->mFaces[j].mIndices[0]; 
      //faces[j * 3 + 1] = mesh->mFaces[j].mIndices[1]; 
      //faces[j * 3 + 2] = mesh->mFaces[j].mIndices[2]; 
     } 
    } 

    return 0; 
} 

box.obj

v 0.000 0.000 1.000 
v 0.894 0.000 0.447 
v 0.276 0.851 0.447 
v -0.724 0.526 0.447 
v -0.724 -0.526 0.447 
v 0.276 -0.851 0.447 
v 0.724 0.526 -0.447 
v -0.276 0.851 -0.447 
v -0.894 0.000 -0.447 
v -0.276 -0.851 -0.447 
v 0.724 -0.526 -0.447 
v 0.000 0.000 -1.000 

f 2 1 0 
f 3 2 0 
f 4 3 0 
f 5 4 0 
f 1 5 0 
f 11 6 7 
f 11 7 8 
f 11 8 9 
f 11 9 10 
f 11 10 6 
f 1 2 6 
f 2 3 7 
f 3 4 8 
f 4 5 9 
f 5 1 10 
f 2 7 6 
f 3 8 7 
f 4 9 8 
f 5 10 9 
f 1 6 10 

輸出

has positions: 1 has faces: 1 
vertex count: 11 
face count: 20 
Face Indices: 2 I0 V0 I1 V1 
Face Indices: 2 I0 V2 I1 V0 
Face Indices: 2 I0 V3 I1 V2 
Face Indices: 2 I0 V4 I1 V3 
Face Indices: 2 I0 V1 I1 V4 
Face Indices: 3 I0 V5 I1 V6 I2 V7 
Face Indices: 3 I0 V5 I1 V7 I2 V8 
Face Indices: 3 I0 V5 I1 V8 I2 V9 
Face Indices: 3 I0 V5 I1 V9 I2 V10 
Face Indices: 3 I0 V5 I1 V10 I2 V6 
Face Indices: 3 I0 V1 I1 V0 I2 V6 
Face Indices: 3 I0 V0 I1 V2 I2 V7 
Face Indices: 3 I0 V2 I1 V3 I2 V8 
Face Indices: 3 I0 V3 I1 V4 I2 V9 
Face Indices: 3 I0 V4 I1 V1 I2 V10 
Face Indices: 3 I0 V0 I1 V7 I2 V6 
Face Indices: 3 I0 V2 I1 V8 I2 V7 
Face Indices: 3 I0 V3 I1 V9 I2 V8 
Face Indices: 3 I0 V4 I1 V10 I2 V9 
Face Indices: 3 I0 V1 I1 V6 I2 V10 

問題的代碼我知道有n刪除等我只是試圖儘可能多地刪除代碼,使問題更容易找到。

它值得系統= Ubuntu 15.04。希望它可能是一個系統問題昨晚升級

+1

'0'是你的vert的有效索引嗎?前5個面都有0個,其餘的沒有,前5個面只有兩個頂點。 – 1201ProgramAlarm

+0

我認爲你是對的。我從另一個來源拿走了臉部並用手重新排列。看起來我忘了增加它們。我用正確的面值重新運行它,並且它看起來像其他所有東西都很好。你不知道我有多少次閱讀和重新閱讀我的代碼和assimp文檔來尋找我出錯的地方。謝謝!! –

回答

2

這是因爲臉上的頂點數應該是基於1的,而不是基於0的。