Разбор FBX для дисплея openGL

Я хочу проанализировать FBX file и отобразить его через openGL на iPhone. в настоящее время попробуйте разобрать формат *.fbx, используя FBX SDK from Autodesk.

Также нашел эту ссылку полезной, но все еще есть некоторые недоразумения - я предполагаю, что индексы, которые я получаю, неверны. Я создаю простой куб в блендере и экспортирую этот файл в *.fbx. Если я открою этот файл через приложение FBX Review - все будет отображаться идеально, но когда я попытаюсь нарисовать этот куб - похоже, что некоторые данные, которые я анализирую, неверны/или частичны.

Чтобы получить индексы, я использую следующий код

int numIndices = pMesh->GetPolygonVertexCount();
int *indices = new int [numIndices];
indices = pMesh->GetPolygonVertices();

int polygonCount = pMesh->GetPolygonCount();
int totalObjSize = 0;
for (int i = 0; i < polygonCount; ++i) {
    totalObjSize += pMesh->GetPolygonSize(i);
}

Результат:

----Indices----24---: 0 1 2 3 4 7 6 5 0 4 5 1 1 5 6 2 2 6 7 3 4 0 3 7

----Coordinates(Vertises)----72
1 1 -1 
1 -1 -1 
-1 -1 -1 
-1 1 -1  
1 0.999999 1 
-1 1 1 
-1 -1 1 
0.999999 -1 1 
1 1 -1  
1 0.999999 1 
0.999999 -1 1 
1 -1 -1 
1 -1 -1 
0.999999 -1 1 
-1 -1 1 
-1 -1 -1 
-1 -1 -1 
-1 -1 1 
-1 1 1 
-1 1 -1  
 1 0.999999 1 
 1 1 -1 
-1 1 -1 
-1 1 1 

----Texture UV----48
0.499999 9.7692e-05
0.499999 0.333364
0.250049 0.333364
0.250049 9.78112e-05
0.250049 0.666633
0.499999 0.666633
0.499999 0.9999
0.250049 0.9999
0.74995 0.333366
0.74995 0.666633
0.5 0.666633
0.5 0.333367
0.499998 0.333366
0.499998 0.666632
0.250048 0.666633
0.250048 0.333366
0.25005 0.333367
0.25005 0.666633
0.000100091 0.666633
0.000100024 0.333367
0.749953 0.666639
0.749953 0.333373
0.999903 0.333373
0.999903 0.666639

----Normal----72
0 0 -1 
0 0 -1 
0 0 -1 
0 0 -1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
0 -1 0 
0 -1 0 
0 -1 0 
0 -1 0 
-1 0 0 
-1 0 0 
-1 0 0 
-1 0 0 
0 1 0 
0 1 0 
0 1 0 
0 1 0 

Также я могу анализировать вершины (координаты) и текстуры UV и нормали - все выглядит правильно (я сравниваю значение, которое я получаю, со значениями, которые можно получить с помощью примера приложения ImportScene, доступного через ссылка.

Поэтому, когда я пытаюсь использовать все данные в openGL, я получаю неожиданный объект.

Вопрос в том, правильно ли я разбираю индексы из файла FBX?

Также это связано с моим вопросом относительно рисования obj в openGL.

---ОБНОВИТЬ---

Я также считаю, что эти индексы неверны (отсутствуют в порядке и не заполнены), поэтому возникает вопрос, как создать правильный порядок индексов из файла FBX?


person hbk    schedule 08.08.2016    source источник


Ответы (1)


Если кто-то столкнется с такой же проблемой, я опубликую свои решения (возможно, есть другой способ сделать это, это скорее обходной путь, чем реальные решения, поэтому, если кто-то найдет другой способ - это будет здорово)

    int indicessCount = index;
    int *testIndices = new int [indicessCount]; 
        index = 0;
    pairCounter = 0;
    int indexElement = 0;
    for (int i = 0; i < polygonCount; i++) {
        int lPolygonSize = pMesh->GetPolygonSize(i);
        for (int j = 0; j< lPolygonSize; j++) {
            _displayModel.indises[index++] = indexElement + j;
            if (j==2) {
                if ((pairCounter % 1)) {
                    int firstIndex = index-3;
                    int secondIndex = index-1;
                    _displayModel.indises[index++] = _displayModel.indises[secondIndex];
                    _displayModel.indises[index++] = _displayModel.indises[firstIndex];
                    pairCounter = 0;
                }
                pairCounter++;
            }
        }
    indexElement += lPolygonSize;
}

также тринагулируйте свою сцену

FbxGeometryConverter converter(_fbxManager);
converter.Triangulate(_fbxScene, true);
person hbk    schedule 11.08.2016