Hello!
I am trying to import a model with the help of the fbx sdk. Now it's not the best documented SDK so please help me with this one.
The following code loads vertices,normals, uvs and indices. This gets then rendered by opengl. The rendering part works fine(already tested with static stuff). The problem is loading the normals. So here the code:
int polygonCount = pMesh->GetPolygonCount();
int numIndices = polygonCount * 3;
int numVertices = pMesh->GetControlPointsCount();
FbxGeometryElementNormal *pNormalElement = pMesh->GetElementNormal(0);
FbxGeometryElementUV *pUVElement = pMesh->GetElementUV(0);
FbxLayerElement::EMappingMode normalMappingMode = pNormalElement->GetMappingMode();
FbxLayerElement::EMappingMode uvMappingMode = pUVElement->GetMappingMode();
FbxLayerElement::EReferenceMode normalReferenceMode = pNormalElement->GetReferenceMode();
FbxLayerElement::EReferenceMode uvReferenceMode = pUVElement->GetReferenceMode();
unsigned short *pIndices = new unsigned short[numIndices];
VERTEX_POSITION_NORMAL_UV *pVertices = new VERTEX_POSITION_NORMAL_UV[numVertices];
for(int i = 0;i<polygonCount;i++)
{
for(int j = 0;j<3;j++)
{
int polygonVertex = pMesh->GetPolygonVertex(i,j);
pIndices[(i*3)+j] = polygonVertex;
FbxVector4 position = pMesh->GetControlPointAt(polygonVertex);
pVertices[polygonVertex].x = position.mData[0];
pVertices[polygonVertex].y = position.mData[1];
pVertices[polygonVertex].z = position.mData[2];
FbxVector4 normal = pNormalElement->GetDirectArray().GetAt(polygonVertex);
normal.Normalize();
pVertices[polygonVertex].nx = normal.mData[0];
pVertices[polygonVertex].ny = normal.mData[1];
pVertices[polygonVertex].nz = normal.mData[2];
FbxVector2 uv = pUVElement->GetDirectArray().GetAt(polygonVertex);
pVertices[polygonVertex].uvx = uv.mData[0];
pVertices[polygonVertex].uvy = uv.mData[1];
}
}
And this code then gives me the output you can see on the attached screenshot(its supposed to be superman). The colors are just the normals used as color. Also the normals face in random directions, so most of the time I see through the mesh.
Am I using the fbx sdk correctly? I am really not sure about the index in the function call pNormalElement->GetDirectArray().GetAt(polygonVertex);
I hope someone can help me.
Thanks in advance!