Skip to content

Instantly share code, notes, and snippets.

@fereria
Created February 19, 2020 15:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fereria/cb33cb43e6d069b545a14393632277c5 to your computer and use it in GitHub Desktop.
Save fereria/cb33cb43e6d069b545a14393632277c5 to your computer and use it in GitHub Desktop.
void getAssignMaterials(FbxMesh *pMesh)
{
//参考: https://github.com/cyrillef/FBX-iOS-ImportScene/blob/master/ImportScene/DisplayMesh.cxx
// MaterialAssignが1Mesh1Materialかどうかチェック
bool isAllSame = true;
for (int l = 0; l < pMesh->GetElementMaterialCount(); l++){
FbxGeometryElementMaterial *matElement = pMesh->GetElementMaterial(l);
if (matElement->GetMappingMode() == FbxGeometryElement::eByPolygon)
{
isAllSame = false;
break;
}
}
if (isAllSame){
// allSameの場合、1Mesh 1Material
// IndexArraの0番目のMaterialIndexを使用する
FbxGeometryElementMaterial *matElement = pMesh->GetElementMaterial(0);
if (matElement->GetMappingMode() == FbxGeometryElement::eAllSame)
{
int matId = matElement->GetIndexArray().GetAt(0);
FbxSurfaceMaterial *mat = pMesh->GetNode()->GetMaterial(matId);
printNode(mat);
}
}else{
//eByPolygonの場合は1poly1Material
int polyCount = pMesh->GetPolygonCount();
for (int i = 0; i < polyCount; i++)
{
for (int l = 0; l < pMesh->GetElementMaterialCount(); l++)
{
FbxGeometryElementMaterial *matElement = pMesh->GetElementMaterial(l);
FbxSurfaceMaterial *mat = NULL;
int matId = -1;
matId = matElement->GetIndexArray().GetAt(i);
mat = pMesh->GetNode()->GetMaterial(matId);
printNode(mat);
}
}
}
}
void fbxTest_02()
{
char *fbxFile = "D:/cube.fbx";
FbxManager *manager = FbxManager::Create();
FbxIOSettings *ioSettings = FbxIOSettings::Create(manager, IOSROOT);
FbxImporter *importer = FbxImporter::Create(manager, "");
importer->Initialize(fbxFile, -1, manager->GetIOSettings());
// Fbxにシーンをロード
FbxScene *scene = FbxScene::Create(manager, "scene");
importer->Import(scene);
importer->Destroy();
FbxNode *rootNode = scene->GetRootNode();
FbxNode *cube = rootNode->GetChild(0);
FbxMesh *mesh = cube->GetMesh();
getAssignMaterials(mesh);
manager->Destroy();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment