Jump to content
  • Advertisement
Sign in to follow this  

[FBX SDK] Importing static model problem

This topic is 2054 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts



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];
		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);
				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!

Share this post

Link to post
Share on other sites

Have you tried to not normalize the vector here:

				FbxVector4 normal = pNormalElement->GetDirectArray().GetAt(polygonVertex);

I don't know the SDK, but the normal is only a 3-component vector, leaving the w-coord with either 0 or some other random value. Normalizing the whole 4-component vector would deform it if the w-coord contains some random value.


Although check the mapping mode. Direct mapping for normals might work, but UV is likely mapped by index. Best to take a look at the file itself.

Share this post

Link to post
Share on other sites

I changed the line to

FbxVector4 normal = pNormalElement->GetDirectArray().GetAt(polygonVertex);
normal.mData[3] = 0.f;

so it doesnt normalize the w-component. Doesn't change anything.


I checked the referenceMode of the normals and it is set to eDirect and as you said the uv is referenced with eDirectToIndex.

Since I am not using the uvs atm I don't want to worry about them. I first wanna get the normals right.


NormalMappingMode is eByPolygonVertex

NormalReferenceMode is eDirect


I think for these 2 values I am extracting the data the correct way, am I?

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!