fbx_to_3dtiles/cpp_src/fbx_parse.cpp

63 lines
2.5 KiB
C++

#include <fbxsdk.h>
#include <stdio.h>
using namespace std;
extern "C" {
// 定义给Rust调用的接口函数
void fbx_parse(const char* fbx_path) {
std::printf("%s\n", fbx_path);
FbxManager* lSdkManager = FbxManager::Create();
if (lSdkManager){
std::printf("FbxManager created successfully.\n");
} else{
std::printf("FbxManager creation failed.\n");
}
FbxScene* lScene = FbxScene::Create(lSdkManager, "myScene");
if (lScene){
std::printf("FbxScene created successfully.\n");
} else{
std::printf("FbxScene creation failed.\n");
}
FbxImporter* lImporter = FbxImporter::Create(lSdkManager, "");
bool s = lImporter->Initialize(fbx_path, -1, lSdkManager->GetIOSettings());
if (s){
std::printf("FbxImporter initialized successfully.\n");
} else{
std::printf("FbxImporter initialization failed.\n");
}
lImporter->Import(lScene);
lImporter->Destroy();
FbxNode* lRootNode = lScene->GetRootNode();
if (lRootNode) {
std::printf("Root node found. Node name: %s\n", lRootNode->GetName());
int childCount = lRootNode->GetChildCount();
std::printf("Number of child nodes: %d\n", childCount);
for (int i = 0; i < childCount; ++i) {
FbxNode* childNode = lRootNode->GetChild(i);
std::printf("Child node %d name: %s\n", i, childNode->GetName());
}
} else {
std::printf("No root node found in the scene.\n");
}
if (lRootNode && lRootNode->GetNodeAttribute() &&
lRootNode->GetNodeAttribute()->GetAttributeType() == FbxNodeAttribute::eMesh) {
FbxMesh* lMesh = static_cast<FbxMesh*>(lRootNode->GetNodeAttribute());
int materialCount = lMesh->GetElementMaterialCount();
std::printf("Number of materials in the mesh: %d\n", materialCount);
for (int i = 0; i < materialCount; ++i) {
FbxSurfaceMaterial* lMaterial = nullptr;
std::printf("Material name: %s\n", lMaterial->GetName());
// lMesh->GetElementMaterial(0)->eMaterial(i, lMaterial);
// if (lMaterial) {
// std::printf("Material %d name: %s\n", i, lMaterial->GetName());
// }
}
int controlPointCount = lMesh->GetControlPointsCount();
std::printf("Number of vertices in the mesh: %d\n", controlPointCount);
}
}
}